【问题标题】:Strange behavior in the "Verify" method in MoqMoq 中“验证”方法中的奇怪行为
【发布时间】:2010-11-14 21:08:14
【问题描述】:

在以下代码中,Test1 成功但 Test2 失败:

protected Mock<IMyInterface> MyMock { get; set; }

[SetUp]
public virtual void  Initialize()
{
    MyMock = new Mock<IMyInterface>();
}

[Test]
void Test1()
{
    // ... code that causes IMyIntervace.myMethod to be called once

    MyMock.Verify(x=> x.myMethod(), Times.Once());
}

[Test]
void Test2()
{
    MyMock.Verify(x=> x.myMethod(), Times.Once());
}

这种行为实际上非常有用,但我不明白为什么它会这样工作。看来Test2也应该成功了!

我唯一的想法是,Verify 以某种方式足够聪明,可以知道“myMethod”是从不同的测试用例中调用的,因此它“不算数”?

顺便说一句,即使我在 Test1 中删除了对验证的调用,也会发生同样的事情(Test2 失败)。

【问题讨论】:

    标签: c# unit-testing nunit mocking moq


    【解决方案1】:

    您的 SetUp 方法在每次测试之前运行,因此它会在 Test2 之前重新创建您的模拟。

    在 Test2 中,您没有执行任何操作,因此您的验证失败。您正在尝试验证是否已调用 MyMethod - 但它没有。所以,失败。

    如果您尝试只创建一次模拟,则需要使用[TestFixtureSetUp]

    【讨论】:

    • +1。我建议不要在 TestFixtureSetUp 中创建一个用于验证的模拟。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2019-06-16
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    相关资源
    最近更新 更多