moq 的常用使用方法(推荐)(2)

Mock 的行为分为严格的 Strict 和宽松的 Loose, 默认为宽松的。在严格模式下,使用任何没有被指定的行为,都将会抛出异常,宽松模式下,不会抛出任何异常,方法将会返回默认值或者空的数组等等。

var mock = new Mock<IFoo>(MockBehavior.Strict);

如果没有重写基类的实现,默认将不会调用基类,在 Mock Web/Html 控件的是必须的。

var mock = new Mock<IFoo> { CallBase = true };

创造自动递归的 Mock, Mock 对象对于它的任何成员将会返回一个新的 Mock 对象。

var mock = new Mock<IFoo> { DefaultValue = DefaultValue.Mock }; // 默认是 DefaultValue.Empty // 现在这个属性将会返回一个新的 Mock 对象 IBar value = mock.Object.Bar; // 可以使用返回的 Mock 对象, 后即对属性的访问返回相同的对象实例 // 这就允许我们可以进行后继的设置 // set further expectations on it if we want var barMock = Mock.Get(value); barMock.Setup(b => b.Submit()).Returns(true);

中心化的 Mock 实例创建和管理:你可以在一个地方使用 MockRepository 创建和验证所有的 Mock 对象,设置 MockBehavior, CallBse 和 DefaultValue 约束。

var factory = new MockFactory(MockBehavior.Strict) { DefaultValue = DefaultValue.Mock }; // 创建 Mock 对象 var fooMock = factory.Create<IFoo>(); // 在创建的时候重写仓库的设置 var barMock = factory.Create<IBar>(MockBehavior.Loose); // 验证通过仓库创建的对象 factory.Verify();

其它

// 用在测试用例的开始 using Moq.Protected() // 测试中 var mock = new Mock<CommandBase>(); mock.Protected() .Setup<int>("Execute") .Returns(5); // 如果用到了参数匹配, 必须使用 ItExpr 来代替 It // 以后计划改进 mock.Protected() .Setup<string>("Execute", ItExpr.IsAny<string>()) .Returns(true);

高级特性

// 从 Mock 实例重新获得 Mock 对象 IFoo foo = // get mock instance somehow var fooMock = Mock.Get(foo); fooMock.Setup(f => f.Submit()).Returns(true); // 实现多个接口 var foo = new Mock<IFoo>(); var disposableFoo = foo.As<IDisposable>(); // 现在 IFoo mock 已经实现了接口 IDisposable :) disposableFoo.Setup(df => df.Dispose()); // 定制匹配 mock.Setup(foo => foo.Submit(IsLarge())).Throws<ArgumentException>(); ... public string IsLarge() { return Match<string>.Create(s => !String.IsNullOrEmpty(s) && s.Length > 100); }

以上所述是小编给大家介绍的moq 的常用使用方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wjyzpx.html