0

次の構造の 2 つの基本クラスからコントローラーが派生する MVC プロジェクトがあります。

Global Base Controller
|
|--------------------|
Type1               Type2
|                    |
|--------------------------------------|
Controller1/Controller2         Controller3/Controller4

DRYプリンシパルに固執するために、controller1/2/3/4でオーバーライドされたメソッドのみをテストするように単体テストをセットアップしたいと思います。これは、テストを に追加するとGlobal Base Controller、チェーンのさらに下に適用されることを意味します。

NUnit/msTest でこれを達成する最善の方法は何ですか?

次の例のように、テストで同じ構造をたどってみましたが、基本テストは取得されません。

public class ControllerTestClass<T>
{
    public class ForThisMethod
    {
        [Test]
        public void WhenThisCondition_HasThisValue()
        {
            Assert.IsAssignableFrom<T>("");
        }
    }
}

public class UnitTest2 : ControllerTestClass<String>
{
    [TestFixture]
    public class ForThisMethod2
    {
        [Test]
        public void WhenThisCondition_HasThisValue()
        {
            Assert.True(true);
        }
    }
}

上記の構造では、テスト エクスプローラーに次のように表示されます。

テスト エクスプローラーの結果

注:この方法でテストするには、新しい機能の開発者が追加のテストを追加する必要があることを知っています。これは問題なく、プロジェクト ノートに書き込まれます。

4

1 に答える 1

0

実装コードと同じようにテストを考える必要があると思いますが、「正式な」方法ではありません。テスト コードを過度に複雑にしようとしています。危険なのは、テスト コードの管理と実装コードの管理に同じ時間と労力を費やすことになる可能性があることです。

私がしているのは、共通の機能に継承を使用し、同じコードの記述を減らすことができるようにすることです (ここで同じことを達成しようとしていると思います)。それらを管理します。

一般に、あまりにも多くの同じテスト メソッドを作成する必要がある場合は、問題があります。実装の設計と問題を再考する必要があります。IoC/DI または同様の手法を使用してコードのサペレーションを導入する必要があります。このようにして、一般的なコードには限られた数のテストしかなく、さまざまな機能に固有の他のすべてのコードは分離してテストされます。(これが理にかなっていることを願っています:))

于 2013-10-15T08:11:34.400 に答える