1
私はある種の実装に依存しないフィクスチャーを作成しようとしています。NUnitテストフィクスチャーの階層
私は以下のインターフェースを持っています。
public interface ISearchAlgorithm
{
// methods
}
と私はそれがどのように振る舞うべきかを正確に知っているので、私はすべての派生クラスのテストの同じセットを実行したい:
public class RootSearchAlgorithmsTests
{
private readonly ISearchAlgorithm _searchAlgorithm;
public RootSearchAlgorithmsTests(ISearchAlgorithm algorithm)
{
_searchAlgorithm = algorithm;
}
[Test]
public void TestCosFound()
{
// arrange
// act with _searchAlgorithm
// assert
}
[Test]
public void TestCosNotFound()
{
// arrange
// act with _searchAlgorithm
// assert
}
// etc
その後、私は、各派生クラスに対して以下の備品を作成します。
[TestFixture]
public class BinarySearchTests : RootSearchAlgorithmsTests
{
public BinarySearchTests(): base(new BinarySearchAlgorithm()) {}
}
[TestFixture]
public class NewtonSearchTests : RootSearchAlgorithmsTests
{
public NewtonSearchTests(): base(new NewtonSearchAlgorithm()) {}
}
R#テストランナーとNUnit GUIの両方が基本クラステストを示していることを除けば、うまくいきます。もちろん、適切なコンストラクターがないので失敗します。
[TestFixture]
と記されていないと、なぜそれも実行されますか?私は[Test]
属性のメソッドのためだと思いますか?
どのようにして基本クラスを防止でき、そのメソッドが結果に表示されないのですか?
このソリューションには空のコンストラクタ要件の欠点があります。このコードでは、表示されたコンストラクタがその時点で空であっても避けたいと考えています。私は何らかのコンストラクト関数を渡すことができると思います。私はそれを調べなければなりません。ありがとう。 – Grozz
Generic Test Fixtures with Parametersを使用して、コンストラクタにパラメータを渡すことができると思います。 –