c# – 模拟方法执行时间和顺序
发布时间:2020-12-15 08:48:23 所属栏目:百科 来源:网络整理
导读:我正在使用Moq与方法接口配对.我需要测试这个接口中的方法是按照一定的顺序执行的,也是每个方法执行一定次数的. 接口 public interface IInterface{ void MethodOne(string foo); void MethodTwo(string foo);} 方法 // MyClass stuff ...public async Task
我正在使用Moq与方法接口配对.我需要测试这个接口中的方法是按照一定的顺序执行的,也是每个方法执行一定次数的.
接口 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")); } 不应该通过,但确实…… >我需要做些什么来验证是否符合正确的顺序? 解决方法
这可能是你想要去的主题,但
NSubstitute是一个很好的模拟库,可以很好地处理这个问题.
在NSubstitute它只是: var mock = Substitute.For<IInterface>(); var obj = new MyClass(); await obj.Run(); Received.InOrder(() => { mock.MethodOne("foo"); mock.MethodTwo("foo"); }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |