我真的很欣赏AutoFixture与XUnit理论相结合的力量。我最近采用了encapsulating customizations,并通过属性将它们提供给我的测试。如何修改我的自定义理论数据属性为AutoFixture创建的夹具?
在某些场合,我需要一次性场景来运行我的测试。当我像上面一样使用AutoDomainDataAttribute时,我可以问一个IFixture并期望获得由属性创建的同一个实例吗?
在我的方案中,默认情况下使用MultipleCustomization作为集合等。但是,在这种情况下,我只想将单个项目发送到我的SUT的构造函数。所以,我已经定义了我的测试方法,如下所示:
[Theory, AutoDomainData]
public void SomeTest(IFixture fixture) {
fixture.RepeatCount = 1;
var sut = fixture.CreateAnonymous<Product>();
...
}
不幸的是,创建匿名产品时出现异常。其他测试工作得很好,如果我要求产品作为具有这些属性的方法参数。这只是一个问题,在这个特定的情况下,我希望fixture参数是由我的AutoDomainDataAttribute创建的。
产品的构造函数需要一个通常由3个项目填充的IEnumerable,这是由于我通过AutoDomainData就地实现了自定义。目前,我的DomainCustomization是由MultipleCustomization和AutMoqCustomization组成的CompositeCustomization,按此顺序。
例外情况是:“InvalidCastException:无法投射类型为'Castle.Proxies.ObjectProxy'的对象以键入'Product'。”
谢谢你,马克。在发布之后,我立即转向了命令式测试方法。尽管知道替代方案是很好的。最后,我的特殊测试是确保最后一个类别不能从产品中删除(必须至少有一个)。这是我唯一需要控制'RepeatCount'的时间。再次感谢! – ventaur
难道你不能只是删除'类别。Count() - 1'项目首先作为您的测试设置的一部分,然后只测试一个左侧,您不能删除最后一个? –
是的,我想是的。我们的程序员有时会因复杂的事情而苦恼。 :-) – ventaur