一般的なテストを再利用したいのですが、一般的なテストデータを取得するにはどうすればよいですか?
私は自分のIReadOnlyCollection<T>
インターフェースを書き、それを使用するいくつかのクラスを書きました。
そのインターフェイスのメソッドとプロパティ(たとえばContains
、CopyTo
)は、それを実装するクラスに関係なく常にまったく同じように機能する必要があるため、任意の実装に適用できる汎用テストを作成したいと思います。この投稿で提案されているアプローチを使用すると、次のようになります。
// Tests that must work for any type T:
public abstract class IReadOnlyCollectionTests<T>
{
protected abstract IReadOnlyCollection<T> CreateInstance(params T[] data);
[Test]
public void Contains_GivenExistingValue_ReturnsTrue()
{
// Given
T[] data; // <-- Get some data?
T value = data[1];
var sut = CreateInstance(data);
// When
bool result = sut.Contains(value);
// Then
Assert.IsTrue(result);
}
// 40 more such tests...
}
ここで、テストするデータが必要です。タイプT
はブール値、文字列、またはその他のいずれかです。どのタイプでも機能する一般的なデータをそこに取得するにはどうすればよいT
ですか?
ちなみに、この一般的なテストは、実装ごとにテストクラスを派生させて実行します。たとえば、私のBitArray
実装(ブール値のコレクション)の場合のように、次のようになります。
[TestFixture]
public class BitArrayROC : IReadOnlyCollectionTests<bool>
{
protected override IReadOnlyCollection<bool> CreateInstance(params bool[] data)
{
return new BitArray(data);
}
}
と同様にBitArray
、実装StringCollection
をテストしたいクラスがあります(とりわけ) 。IReadOnlyCollection<T>