将AutoFixture与AutoFixture.AutoMoq包一起使用时,我有时会发现没有配置为正确测试他们要测试的东西的测试,但由于默认(松散)模拟行为,问题从未被发现:
public interface IService { bool IsSomethingTrue(int id); } void Main() { var fixture = new Fixture() .Customize(new AutoMoqCustomization()); var service = fixture.Freeze>(); Console.WriteLine(service.Object.IsSomethingTrue(1)); // false }
我想让Mocks用严格的行为创建,所以我们被迫调用Setup()
我们期望被调用的方法.我可以为每个单独的模拟这样做:
fixture.Customize>(c => c.FromFactory(() => new Mock (MockBehavior.Strict)));
但是在梳理了AutoMoqCustomization()的源代码以及各种ISpecimenBuilder
其他实现之后,我很遗憾只能让所有的Mocks用严格的行为进行初始化.该框架看起来非常灵活和可扩展,所以我确信有一种简单的方法可以做到这一点 - 我无法弄清楚如何做到这一点.