我正在尝试moq,我对Setup()方法有疑问。我有以下界面和类:
public interface IMyInterface
{
void Print(string name);
}
public class MyClass
{
private IMyInterface my;
public MyClass(IMyInterface my)
{
this.my = my;
}
public void Print()
{
my.Print("hello world");
}
}
我使用NUnit进行了这个单元测试:
[Test]
public void AnotherTest()
{
var mock = new Mock<IMyInterface>();
mock.Setup(m => m.Print("hello world")).AtMostOnce();
var myClass = new MyClass(mock.Object);
myClass.Print();
mock.Verify(m => m.Print("hello world"), Times.Exactly(1));
}
我试图评论/取消注释以下行,两个测试都成功了。这让我想知道在这种情况下是否需要Setup(),因为我正在进行Verify()?
我使用的是3.5.716.1版。
答案 0 :(得分:2)
在您的第一个示例中,您是正确的,在验证设置只执行一次时,您无需调用设置。
然而,在您的第二次单元测试中,它会通过,因为您实际上并未验证您的设置。
如果你调用mock.VerifyAll(),测试将失败。
AtMostOnce()设定了一次只能执行一次的期望。只有在明确验证设置被调用一次时,测试才会失败。它实际上不会因为你多次调用而失败。