【发布时间】:2015-08-13 15:13:22
【问题描述】:
我正在使用与方法接口配对的起订量。我需要测试这个接口中的方法是否按一定的顺序以及每个方法执行了一定的次数。
界面
public interface IInterface
{
void MethodOne(string foo);
void MethodTwo(string foo);
}
方法
// MyClass stuff ...
public async Task Run()
{
MethodOne("foo");
MethodTwo("foo");
}
// ...
测试
我编写了这个测试来验证这些方法只执行了一定的次数(一次):
[TestMethod]
public async Task Test()
{
var mock = new Mock<IInterface>();
var mockSequence = new MockSequence();
var obj = new MyClass();
await obj.Run();
mock.Verify(i=> i.MethodOne("foo"), Times.Once());
mock.Verify(i=> i.MethodTwo("foo"), Times.Once());
}
这很好用...
我已经尝试过这些测试以确定是否正确满足了某个顺序,但测试似乎总是通过。
[TestMethod]
public async Task Test()
{
var mock = new Mock<IInterface>();
var mockSequence = new MockSequence();
var obj = new MyClass();
await obj.Run();
mock.InSequence(mockSequence).Setup(i => i.MethodOne("foo"));
mock.InSequence(mockSequence).Setup(i => i.MethodTwo("foo"));
}
应该通过,并且确实...
[TestMethod]
public async Task Test()
{
var mock = new Mock<IInterface>();
var mockSequence = new MockSequence();
var obj = new MyClass();
await obj.Run();
mock.InSequence(mockSequence).Setup(i => i.MethodTwo("foo")); // swapped order here
mock.InSequence(mockSequence).Setup(i => i.MethodOne("foo"));
}
不应该通过,但是可以...
- 我需要做些什么来验证是否符合正确的顺序?
- 如何将两者结合起来,以便测试执行次数和正确的顺序?
【问题讨论】:
-
我将此标记为重复,因为这两个问题似乎指的是同一个问题。如果他们不这样做,请告诉我,我会投票重新开放。
-
我在问这个问题之前阅读了这个问题。该问题已通过回答说这是 Moq 中的错误得到解决。那是 3 年前的事了……我认为这仍然不是错误。
-
我重新打开了这个问题