Jestem trochę późno do partii, ale szukałem tej samej odpowiedzi, a w tym czasie dokumentacja xUnit jest bardzo pomocne w odniesieniu do sposobu wdrożenia klasy uchwyty i Urządzeń Collection, które dają programistom szeroki zakres funkcji konfiguracji/przestoju na poziomie klasy lub grupy klas. Jest to zgodne z odpowiedzią Geira Sagberga i daje dobrą implementację szkieletu, aby zilustrować, jak powinien wyglądać.
https://xunit.github.io/docs/shared-context.html
Oprawy Kolekcja Kiedy stosować: gdy chcesz utworzyć jeden kontekst testowy i udostępnić go wśród testów w kilku klasach testowych i miały je oczyścić po wszystkich testach w klasach testowych Zakończyliśmy.
Czasami chcesz udostępnić obiekt urządzenia spośród wielu klas testowych. Przykład bazy danych używany dla urządzeń klas jest świetnym przykładem: możesz zainicjować bazę danych za pomocą zestawu danych testowych, a następnie pozostawić te dane testowe do wykorzystania przez wiele klas testowych. Możesz użyć funkcji fixture kolekcji xUnit.net, aby udostępnić pojedynczą instancję obiektu wśród testów w kilku klasach testowych.
Aby korzystać z urządzeń do zbierania, należy podjąć następujące kroki:
Tworzenie klasy osprzętu i umieścić kod starcie w konstruktorze klasy osprzętu. Jeśli klasa urządzenia wymaga wyczyszczenia, zaimplementuj IDisposable na klasie urządzenia i umieść kod oczyszczający w metodzie Dispose(). Utwórz klasę definicji kolekcji, dekorując ją atrybutem [CollectionDefinition], nadając jej unikalną nazwę, która będzie identyfikować kolekcję testów. Dodaj ICollectionFixture <> do klasy definicji kolekcji. Dodaj atrybut [Collection] do wszystkich klas testowych, które będą częścią kolekcji, używając unikalnej nazwy podanej w atrybucie klasy Collection Collection definicji [CollectionDefinition]. Jeśli klasy testowe wymagają dostępu do instancji urządzenia, dodaj ją jako argument konstruktora, a zostanie ona dostarczona automatycznie. Oto prosty przykład:
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; }
}
[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.
}
[Collection("Database collection")]
public class DatabaseTestClass1
{
DatabaseFixture fixture;
public DatabaseTestClass1(DatabaseFixture fixture)
{
this.fixture = fixture;
}
}
[Collection("Database collection")]
public class DatabaseTestClass2
{
// ...
}
xUnit.net traktuje opraw poboru w taki sam sposób jak uchwyty klasy, z wyjątkiem, że czas życia obiektu osprzętu kolekcja jest już: to jest tworzony przed jakimkolwiek testy są przeprowadzane w dowolnej z klas testowych w kolekcji i nie zostaną wyczyszczone, dopóki wszystkie klasy testów w kolekcji nie zostaną zakończone.
Kolekcje testowe można również ozdobić za pomocą IClassFixture <>. xUnit.net traktuje to tak, jakby każda indywidualna klasa testowa w kolekcji testowej była dekorowana oprzyrządowaniem klasowym.
Kolekcje testowe mają również wpływ na sposób, w jaki xUnit.net uruchamia testy podczas równoległego ich działania. Aby uzyskać więcej informacji, zobacz Testowanie równoległe.
Ważna uwaga: Lampy muszą być w tym samym zestawie, co test, który ich używa.
Chyba tu jest odpowiedź: http://stackoverflow.com/questions/12379949/xunit-resharper-how-to-run-setup-code-only-once –