代码之家  ›  专栏  ›  技术社区  ›  brumScouse

如何使用MoqSequence

  •  1
  • brumScouse  · 技术社区  · 11 年前

    我想测试一个类中三个依赖项的方法的执行顺序。也就是说,检查以确保在类a、b和c上调用了方法,并按照该顺序执行。

    我本来打算使用Moq.Sequence库,但我发现现在可以开箱即用地支持序列测试。唯一的问题是,关于MoqSequence类的文档非常简单,我找不到具体的例子。

    此外,我的问题并不是具体地说这是对还是错,但我相信测试执行顺序是一个有效的测试(这里有点灰色区域?)

    1 回复  |  直到 11 年前
        1
  •  2
  •   jackkav    11 年前

    在同一模拟上使用MockSequence时存在错误。它肯定会在Moq库的后续版本中修复(您也可以通过更改Moq.MethodCall.Matches实现手动修复)。

    如果您只想使用Moq,那么可以通过回调来验证方法调用顺序:

    int callOrder = 0;
    writerMock.Setup(x => x.Write(expectedType)).Callback(() => Assert.That(callOrder++, Is.EqualTo(0))); 
    writerMock.Setup(x => x.Write(expectedId)).Callback(() => Assert.That(callOrder++, Is.EqualTo(1))); 
    writerMock.Setup(x => x.Write(expectedSender)).Callback(() => Assert.That(callOrder++, Is.EqualTo(2)));