我在这个例子中使用AutoFixture来实现包含Mongo ObjectId的对象,就像这样
Fixture fixture = new Fixture(); fixture.Register(ObjectId.GenerateNewId);
但我每次测试都会这样做.是否有可能以某种方式为所有测试注册这个全球?
解决方法
全局(或静态)无法做到这一点.
我通常做的是创建一个TestConventions类,其中包含我想要应用于每个测试的所有自定义.
internal class TestConventions : CompositeCustomization { public TestConventions() : base( new MongoObjectIdCustomization()) { } private class MongoObjectIdCustomization : ICustomization { public void Customize(IFixture fixture) { fixture.Register(ObjectId.GenerateNewId); } } }
然后我将这些约定应用于每个测试:
var fixture = new Fixture().Customize(new TestConventions());
如果您使用的是AutoFixture.XUnit2(或AutoFixture.NUnit)插件,则可以通过定义导入测试约定的属性来减少此样板:
public class MyProjectAutoDataAttribute : AutoDataAttribute { public MyProjectAutoDataAttribute() : base( new Fixture().Customize(new TestConventions())) { } }
然后将其应用于您的测试用例:
[Theory,MyProjectAutoData] public void SomeFact(SomeClass sut) { }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。