【发布时间】:2015-12-03 00:23:55
【问题描述】:
将 AutoFixture 与 AutoFixture.AutoMoq 包一起使用,我有时会发现测试没有配置为正确测试他们要测试的东西,但由于默认的(松散)模拟行为,问题从未被发现:
public interface IService
{
bool IsSomethingTrue(int id);
}
void Main()
{
var fixture = new Fixture()
.Customize(new AutoMoqCustomization());
var service = fixture.Freeze<Mock<IService>>();
Console.WriteLine(service.Object.IsSomethingTrue(1)); // false
}
我想让 Mocks 使用 Strict 行为创建,因此我们不得不为我们期望调用的方法调用 Setup()。我可以像这样为每个单独的模拟执行此操作:
fixture.Customize<Mock<IService>>(c => c.FromFactory(() => new Mock<IService>(MockBehavior.Strict)));
但是在梳理了 AutoMoqCustomization() 的源代码以及各种 ISpecimenBuilder 和其他实现之后,我对让所有 Mocks 以严格行为初始化的最佳方法感到非常迷茫。该框架看起来非常灵活和可扩展,所以我确信有一种简单的方法可以做到这一点——我就是不知道怎么做。
【问题讨论】:
标签: moq autofixture automoq