我有一个类的结构是这样的:
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/