2015-09-08 17 views
6

Sto usando AutoFixture in questo caso di materializzare oggetti contenenti un Mongo ObjectId, in questo modotipo AutoFixture Registrati a livello globale

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

Ma io sto facendo questo per ogni test. È possibile registrare questo globall in qualche modo per tutti i test?

risposta

5

Non c'è un modo per fare questo a livello globale (o staticamente).

Quello che faccio di solito è creare una classe TestConventions che contenga tutte le personalizzazioni che voglio applicare ad ogni test.

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

    } 

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

E poi applicare queste convenzioni per ogni prova:

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

Se si sta utilizzando l'AutoFixture.XUnit2 (o AutoFixture.NUnit) plugin, è possibile ridurre questo boilerplate definendo un attributo che importa i tuoi convenzioni di prova:

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

    } 
} 

E poi applicarlo alla vostra casi di test:

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

} 
1

ho creato una classe di convenzione come suggerito da @drcastro ma ho finito per creare una classe TestBase che ho ereditato dalla mia classe di test Unità

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