Тип регистра 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);
            }
        }
    }