【发布时间】:2015-07-09 04:46:51
【问题描述】:
我在一个类中有一个公共方法,它在内部调用该类中的特定私有方法。它看起来像这样:
public class MyClass : IMyClassInterface
{
public List<int> MyMethod(int a, int b)
{
MyPrivateMethod(a, b, ref varList, ref someVal);
}
private void MyPrivateMethod(int a, int b, ref List<int> varList, ref double someval)
{
}
}
现在,我基本上想用 NUnit 测试这个公共方法。我正在使用 NMock 2.0 进行模拟。我该怎么做?因为,它在内部调用了这个我不想公开的私有方法。或者如果我将私有方法改为受保护,有没有办法做到这一点?
【问题讨论】:
-
私有方法是公共方法的一个实现细节。您应该将其作为测试公共方法的一部分进行测试。如果该方法没有做任何事情,您还会认为您对公共方法的测试是有效的吗?如果是这样,你为什么叫它?
-
我不确定我们是否应该将私有方法作为公共方法的一部分进行测试。将其作为公共方法的一部分进行测试是有意义的。
-
不过,如果我只是想检查是否调用了该私有方法,那么将其设为受保护肯定会有所帮助。
-
这可能在短期内有所帮助,但代价是您将测试与实现紧密结合,这使得将来重构代码变得更加困难。如果感觉这可能是正确的做法,那么可能是您在类中发现了一个依赖项,可以将其提取出来单独测试并注入到您的类中。
标签: c# unit-testing nunit private-members nmock