2015-09-08 12 views
6

Używam AutoFixture w tym przypadku materializować przedmioty zawierające Mongo objectID, tak jaktyp AutoFixture Rejestracja globalnie

Fixture fixture = new Fixture(); 
fixture.Register(ObjectId.GenerateNewId); 

Ale robię to dla każdego testu. Czy możliwe jest zarejestrowanie tego globalnego w jakiś sposób dla wszystkich testów?

Odpowiedz

5

Nie ma sposobu, aby to zrobić globalnie (lub statycznie).

Zazwyczaj tworzę klasę TestConventions zawierającą wszystkie dostosowania, które chcę zastosować do każdego testu.

internal class TestConventions : CompositeCustomization 
{ 
    public TestConventions() : 
     base(
      new MongoObjectIdCustomization()) 
    { 

    } 

    private class MongoObjectIdCustomization : ICustomization 
    { 
     public void Customize(IFixture fixture) 
     { 
      fixture.Register(ObjectId.GenerateNewId); 
     } 
    } 
} 

I wtedy zastosować te konwencje do każdego testu:

var fixture = new Fixture().Customize(new TestConventions()); 

Jeśli używasz AutoFixture.XUnit2 (lub AutoFixture.NUnit) wtyczki, można zmniejszyć tę boilerplate poprzez zdefiniowanie atrybutu który importuje konwencje testy:

public class MyProjectAutoDataAttribute : AutoDataAttribute 
{ 
    public MyProjectAutoDataAttribute() : base(
     new Fixture().Customize(new TestConventions())) 
    { 

    } 
} 

a następnie zastosować go do testów:

[Theory, MyProjectAutoData] 
public void SomeFact(SomeClass sut) 
{ 

} 
1

Stworzyłem klasę konwencji jak sugeruje @drcastro ale skończyło się tworząc klasę TestBase które dziedziczą z klasy w mojej jednostce testowej

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); 
      } 
     } 
    }