나는 같은 대답을 찾고 있었고, 현재 xUnit 문서는 클래스 또는 클래스 그룹 수준에서 개발자에게 광범위한 설정 / 해체 기능을 제공하는 클래스 고정 및 컬렉션 고정을 구현하는 방법과 관련하여 매우 유용합니다. 이것은 Geir Sagberg의 답변과 일치하며 어떻게 생겼는지 설명하는 훌륭한 골격 구현을 제공합니다.
https://xunit.github.io/docs/shared-context.html
컬렉션 픽스처 사용시기 : 단일 테스트 컨텍스트를 생성하여 여러 테스트 클래스의 테스트간에 공유하고 테스트 클래스의 모든 테스트가 완료된 후 정리하도록 할 때.
때로는 여러 테스트 클래스간에 조명기 객체를 공유하고 싶을 것입니다. 클래스 픽스처에 사용 된 데이터베이스 예제는 좋은 예입니다. 테스트 데이터 세트로 데이터베이스를 초기화 한 다음 여러 테스트 클래스에서 사용할 수 있도록 해당 테스트 데이터를 그대로 둘 수 있습니다. xUnit.net의 컬렉션 픽스처 기능을 사용하여 여러 테스트 클래스의 테스트간에 단일 개체 인스턴스를 공유 할 수 있습니다.
수집 설비를 사용하려면 다음 단계를 수행해야합니다.
조명기 클래스를 만들고 조명기 클래스 생성자에 시작 코드를 넣습니다. 조명기 클래스가 정리를 수행해야하는 경우 조명기 클래스에서 IDisposable을 구현하고 Dispose () 메서드에 정리 코드를 넣습니다. 컬렉션 정의 클래스를 만들고 [CollectionDefinition] 속성으로 장식하고 테스트 컬렉션을 식별 할 고유 한 이름을 지정합니다. 컬렉션 정의 클래스에 ICollectionFixture <>를 추가합니다. 테스트 컬렉션 정의 클래스의 [CollectionDefinition] 특성에 제공 한 고유 이름을 사용하여 컬렉션의 일부가 될 모든 테스트 클래스에 [Collection] 특성을 추가합니다. 테스트 클래스가 픽스처 인스턴스에 액세스해야하는 경우 생성자 인수로 추가하면 자동으로 제공됩니다. 다음은 간단한 예입니다.
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은 컬렉션 픽스처 객체의 수명이 더 길다는 점을 제외하고는 클래스 픽스처와 거의 동일한 방식으로 컬렉션 픽스처를 취급합니다. 컬렉션의 테스트 클래스에서 테스트가 실행되기 전에 생성되며 정리되지 않습니다. 컬렉션의 모든 테스트 클래스 실행이 완료 될 때까지
테스트 컬렉션은 IClassFixture <>로 장식 할 수도 있습니다. xUnit.net은이를 테스트 컬렉션의 각 개별 테스트 클래스가 클래스 픽스처로 장식 된 것처럼 취급합니다.
테스트 컬렉션은 병렬로 실행할 때 xUnit.net이 테스트를 실행하는 방식에도 영향을줍니다. 자세한 내용은 병렬 테스트 실행을 참조하십시오.
중요 참고 사항 : Fixture는이를 사용하는 테스트와 동일한 어셈블리에 있어야합니다.