TL;DR - 私は、MSTest と同等の xUnit の機能AssemblyInitialize
(つまり、私が気に入っている 1 つの機能) を探しています。
特に、他の依存関係なしで実行できるようにしたい Selenium スモーク テストがいくつかあるため、これを探しています。IisExpress を起動し、破棄時に強制終了する Fixture があります。ただし、すべてのテストの前にこれを実行すると、実行時間が大幅に膨れ上がります。
テストの開始時にこのコードを 1 回トリガーし、終了時に破棄 (プロセスをシャットダウン) したいと思います。どうすればよいでしょうか?
「現在実行されているテストの数」のようなものにプログラムでアクセスできる場合でも、何かを把握できます。
ベストアンサー1
2015年11月現在、xUnit 2がリリースされており、テスト間で機能を共有する標準的な方法があります。ここ。
基本的には、フィクスチャを実行するクラスを作成する必要があります。
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
。このクラスにより、Xunit はテスト コレクションを作成できるようになり、コレクションのすべてのテスト クラスに対して指定されたフィクスチャが使用されます。
[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;
}
}
各テスト クラスでどのテスト コレクションに属するかを宣言する必要があるため、 MsTests よりも少し冗長ですAssemblyInitialize
が、よりモジュール化されています (MsTests では、クラスに TestClass を配置する必要があります)。
注:サンプルはドキュメンテーション。