我正在编写一个类似于跟随使用nunit和Rhino mock的类。
Class MyClass
{
private void M()
{
N("Hi");
}
private void N(string text)
{
........ do something
}
}
对于方法M的单元测试,我想检查是否使用参数“Hi”调用方法N.我该怎么做?
答案 0 :(得分:10)
在我看来,从测试的角度来看,您正在深入研究对象的实现细节。你不能通过检查方法调用的最终结果来执行测试吗?也就是说,大概这些方法调用会产生一些影响。因此,您应该检查最终结果,而不是检查传递的参数。
通过这种方式,您可以在以后更改基础代码,并且您的单元测试将确认最终结果是否相同,与您的实现无关。
答案 1 :(得分:2)
+1给Brian的回复。
另一种方法是将“N”拆分为另一个类,然后在测试中使用该类的模拟实例。然后,您可以设置模拟以期望使用特定参数进行调用。但是,实际上将它拆分可能并不合适。取决于您的具体情况。
答案 2 :(得分:1)
答案 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");