Тип регистра AutoFixture во всем мире
Я использую AutoFixture в этом случае для материализации объектов, содержащих объект Mongo, например
Fixture fixture = new Fixture();
fixture.Register(ObjectId.GenerateNewId);
но я делаю это для каждого теста. Можно ли как-то зарегистрировать этот globall для всех тестов?
2 ответов
нет способа сделать это (или статически).
обычно я создаю 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)
{
}
Я создал класс соглашения, как предложил @drcastro, но я закончил создание класса TestBase, который я наследовал от моего класса модульного теста
public class TestBase
{
public IFixture GenerateNewFixture()
{
return new Fixture().Customize(new AutoFixtureConventions());
}
}
internal class AutoFixtureConventions : CompositeCustomization
{
public AutoFixtureConventions() :
base(
new MongoObjectIdCustomization())
{
}
private class MongoObjectIdCustomization : ICustomization
{
public void Customize(IFixture fixture)
{
fixture.Register(ObjectId.GenerateNewId);
}
}
}