有关使用Setup()设置Moq行为的问题

时间:2009-08-17 02:29:30

标签: c# installation moq testing

我正在尝试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版。

1 个答案:

答案 0 :(得分:2)

在您的第一个示例中,您是正确的,在验证设置只执行一次时,您无需调用设置。

然而,在您的第二次单元测试中,它会通过,因为您实际上并未验证您的设置。

如果你调用mock.VerifyAll(),测试将失败。

AtMostOnce()设定了一次只能执行一次的期望。只有在明确验证设置被调用一次时,测试才会失败。它实际上不会因为你多次调用而失败。