Depuis Nov 2015, xUnit 2 est sorti, il y a donc un moyen canonique de partager des fonctionnalités entre les tests. Elle est documentée aquí .
En gros, vous devrez créer une classe pour effectuer le montage :
public class DatabaseFixture : IDisposable
{
public DatabaseFixture()
{
Db = new SqlConnection("MyConnectionString");
// ... initialize data in the test database ...
}
public void Dispose()
{
// ... clean up test data from the database ...
}
public SqlConnection Db { get; private set; }
}
Une classe fictive portant le nom CollectionDefinition
attribut. Cette classe permet à Xunit de créer une collection de tests, et utilisera le fixture donné pour toutes les classes de test de la collection.
[CollectionDefinition("Database collection")]
public class DatabaseCollection : ICollectionFixture<DatabaseFixture>
{
// This class has no code, and is never created. Its purpose is simply
// to be the place to apply [CollectionDefinition] and all the
// ICollectionFixture<> interfaces.
}
Ensuite, vous devez ajouter le nom de la collection sur toutes vos classes de test. Les classes de test peuvent recevoir le fixture par le biais du constructeur.
[Collection("Database collection")]
public class DatabaseTestClass1
{
DatabaseFixture fixture;
public DatabaseTestClass1(DatabaseFixture fixture)
{
this.fixture = fixture;
}
}
C'est un peu plus verbeux que MsTests AssemblyInitialize
puisque vous devez déclarer sur chaque classe de test à quelle collection de tests elle appartient, mais c'est aussi plus modulable (et avec MsTests vous devez toujours mettre une TestClass sur vos classes)
Note : les échantillons ont été prélevés sur le documentation .