内容简介:如果想知道注入的类的某个方法被使用了几次,就可以通过 mock 提供的方法进行判断方法有没被执行或被使用多少次本文是一个系列,具体请看本文是在Moq基础(五)的基础上做的补充
如果想知道注入的类的某个方法被使用了几次,就可以通过 mock 提供的方法进行判断方法有没被执行或被使用多少次
本文是一个系列,具体请看
本文是在Moq基础(五)的基础上做的补充
例如有方法 Foo 支持注入接口 IFoo 需要判断在 Foo 方法里面调用 IFoo 的 Foo 方法几次
public class Foo { /// <inheritdoc /> public Foo(IFoo foo) { _foo = foo; } public void A() { _foo.Foo(); } private readonly IFoo _foo; } public interface IFoo { void Foo(); }
此时就可以通过先做一个虚拟的方法
var mock = new Mock<IFoo>(); var foo = new Foo(mock.Object); // 创建一个虚拟方法 mock.Setup(fake => fake.Foo());
然后调用 foo 的需要被测试方法
foo.A();
接着判断这个 IFoo 的 Foo 被调用多少次
// 判断在调用 A 之后调用了 IFoo 的 Foo 方法多少次 mock.Verify(fake => fake.Foo(), Times.Once);
这是整个测试方法的代码
[TestClass] public class FT { [ContractTestCase] public void A() { "调用 Foo 的 A 方法时会调用 IFoo 的 Foo 方法一次".Test(() => { // Arrange var mock = new Mock<IFoo>(); var foo = new Foo(mock.Object); // 创建一个虚拟方法 mock.Setup(fake => fake.Foo()); // Action foo.A(); foo.A(); // Assert // 判断在调用 A 之后调用了 IFoo 的 Foo 方法多少次 mock.Verify(fake => fake.Foo(), Times.Once); }); } }
如果觉得上面的代码写的不错,可以清晰看到每个测试方法,而不是去写小伙伴都看不懂的英文,那么请让使用 MSTestEnhancer 这个测试框架的使用方法十分简单,具体请看 MSTestEnhancer 的使用
使用了之后就可以在运行单元测试的时候看到有哪些方法可以运行,有哪些不通过
下面将会详细告诉大家如何使用方法验证
在 Mock 可以通过 Setup 做出虚拟的方法,为什么需要在 Setup 方法里面再次调用需要被虚拟的方法?因为在 Setup 里面调用的时候,实际是说构造出哪些方法是虚拟的方法
对于不需要被调用的方法就不会在 Setup 构造,这样如果发现被测试的类调用了没有被虚拟的方法,那么证明这个被测试的类有坑
另外在做出虚拟的方法的时候,还可以要求传入参数,在传入参数的时候实际就是对传入的参数做出验证。这里请看 Moq基础(五) 参数匹配,回调,和验证 里面有详细说到。
那么在实际运行被测试类的方法之后,就可以通过 Verify 判断某个方法被调用了多少次
mock.Verify(fake => fake.虚拟的方法, 被调用多少次);
这里的被调用多少次是可以是 Times 属性,这个属性有下面的取值
-
Once 方法只是被调用一次
-
AtLeast 至少多少次,这个方法可以传入参数
-
AtLeastOnce 至少一次
-
AtMost 最多多少次,这个方法可以传入参数
-
AtMostOnce 最多一次
-
Between 在 xx 到 xx 中间,这个方法可以传入参数
-
Exactly 刚好被调用多少次,这个方法可以传入参数
-
Never 没有被使用
通过这个方法就可以判断一个方法被多少次调用,需要注意,在 Verify 里面需要调用被虚拟的方法是用来做参数判断的,可以判断传入了某个参数的方法调使用多少次的方法
如果不满足就会在 Verify 方法抛出 MockException 在里面会说到要求的是什么,但是实际调用的是什么
以上所述就是小编给大家介绍的《Moq基础 判断方法被执行》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- js中if判断语句执行原因--数据类型转换原理
- DEVOPS技术实践_23:判断文件下载成功作为执行条件
- 在SQL Server中使用ISNULL执行空值判断查询
- 你有没有想过: Java 虚拟机是如何判断两个对象是否相同的?判断的流程是什么?
- iOS Rotation 判断
- 判断是否是闰年
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。