如何在单元测试中检查是否使用期望参数调用了私有方法?

时间:2009-07-15 10:25:44

标签: c# unit-testing

我正在编写一个类似于跟随使用nunit和Rhino mock的类。

Class MyClass
{
  private void M()
  {
    N("Hi");
  }

  private void N(string text)
  {
    ........ do something
  }
}

对于方法M的单元测试,我想检查是否使用参数“Hi”调用方法N.我该怎么做?

4 个答案:

答案 0 :(得分:10)

在我看来,从测试的角度来看,您正在深入研究对象的实现细节。你不能通过检查方法调用的最终结果来执行测试吗?也就是说,大概这些方法调用会产生一些影响。因此,您应该检查最终结果,而不是检查传递的参数。

通过这种方式,您可以在以后更改基础代码,并且您的单元测试将确认最终结果是否相同,与您的实现无关。

答案 1 :(得分:2)

+1给Brian的回复。

另一种方法是将“N”拆分为另一个类,然后在测试中使用该类的模拟实例。然后,您可以设置模拟以期望使用特定参数进行调用。但是,实际上将它拆分可能并不合适。取决于您的具体情况。

答案 2 :(得分:1)

对你的方法N()使用模拟。

<强> http://www.mockobjects.com/

然而,Brian解决方案更好 - 认为这是良好的单元测试的良好方向。

答案 3 :(得分:0)

以下代码可以帮助您。

var mock = new Mock<IFoo>();
bool called=false;
string test=string.empty; 
mock.Setup(foo => foo.Execute(It.IsAny<string>())).Callback((string s) => { test = s; called = true;});
Assert.IsTrue(called, "Execute() was not called");