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

Dav*_*vid 10 c# static unit-testing private-members

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

private static Dictionary<Contract, IPriceHistoryManager> _historyManagers = new Dictionary<Contract, IPriceHistoryManager>();
Run Code Online (Sandbox Code Playgroud)

并且让我们说两种方法:

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

 public int CountDic()
 {
    return _historyManagers.Count(); 
 }
Run Code Online (Sandbox Code Playgroud)

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

问题: 这通常被认为是一种"坏"的方法,如果是的话:如何做得更好/更多单位稳定?如果没有:如何最好地进行单元测试?

谢谢.

Jar*_*yer 21

不要害怕为测试目的公开公共操作.从Roy Osherove的"单元测试艺术"转述:当丰田制造汽车时,有可用的测试点.当英特尔构建芯片时,可以使用测试点.汽车或芯片的接口仅用于测试.为什么我们不为软件做同样的事情?一种ResetHistory()方法会完全破坏你的API吗?

如果答案是yes,则创建方法,但制作方法internal.然后,您可以使用该程序集InternalsVisibleTo将内容暴露给您的单元测试库.您有一个可用的方法100%用于测试,但您的公共API没有变化.

  • +1:InternalsVisibleTo真是个好主意. (2认同)