C#:使用私有(private)静态成员进行单元测试?

标签 c# unit-testing static private-members

我有一个类的结构是这样的:

private static Dictionary<Contract, IPriceHistoryManager> _historyManagers = new Dictionary<Contract, IPriceHistoryManager>();

让我们说 2 种方法:

 public void AddSth()
 {
    _historManagers.Add(new Contract(), new PriceHistoryManager());
 }

 public int CountDic()
 {
    return _historyManagers.Count(); 
 }

问题: 当运行单元测试时,没有办法“重置”字典,当我用类的单独实例创建多个单元测试时,“CountDic”会给出不可预测的结果,我无法测试监听。

问题: 这通常被认为是一种“坏”方法吗?如果是:如何做得更好/更可单元测试? 如果不是:如何最好地进行单元测试?

谢谢。

最佳答案

不要害怕为了测试目的公开公共(public)操作。摘自 Roy Osherove 的“单元测试的艺术”:当丰田制造汽车时,有可用的测试点。当英特尔构建芯片时,有可用的测试点。存在仅用于测试的汽车或芯片接口(interface)。为什么我们不对软件做同样的事情? ResetHistory() 方法会完全破坏您的 API 吗?

如果答案是,则创建该方法,但将方法设为内部。然后,您可以使用程序集 InternalsVisibleTo 向您的单元测试库公开内容。您有一个方法可供您创建 100% 用于测试,但您的公共(public) API 没有变化。

关于C#:使用私有(private)静态成员进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7647496/

相关文章:

C# Owin WebApp : Parsing POST Requests?

c# - 指示命令行激活已成功完成UWP

java - 验证 JMockit 中的部分有序方法调用

c - 可能吗?将局部静态值的地址传递给主指针?

c# - 在现有 MVC3 网站中使用 SharePoint 组件

java - 使用 gson 将日期从 c# webapi 交换到 java

unit-testing - 单元或集成测试资源文件目录布局

unit-testing - 在 Grails 中模拟构造函数

c - 静态内联 vs 内联静态

c# - 是否需要在静态类中的每个成员之前键入 'static' ?