2

モック/フェイク オブジェクトを使用した単体テストでは、テスト クラスに同じクラスをテストするメソッドが含まれている場合 (したがって、必要なフェイク オブジェクトはすべてのテスト ケースで同じです)。このようなもの:

class FooTests
{
    Mock<IBar> mockBar;
    Foo fooUnderTest;

    [SetUp]
    public void Setup()
    {
        mockBar = new Mock<IBar>();
        fooUnderTest = new fooUnderTest(mockBar.Object);
    }

    [Test]
    public void MyTest()
    {
        //setup mock methods
        mockBar.SetUp( ... )

        //test
        fooUnderTest.TestSomething()

        //assert something here

    }
}

これにより、各テスト ケースで mockBar と fooUnderTest にコードを複製することが防止されるように思われますが、欠点は、クラス変数の mockBar と fooUnderTest を宣言する必要があることです (または、これは本当に欠点でしょうか?)。特別なセットアップが必要な場合 (たとえば、テストケースで Foo の仮想メソッドの一部をオーバーライドしたい場合)。ベストプラクティスは何ですか?

4

1 に答える 1

5
  • スイート/フィクスチャ内のすべてのテストで共有される共通のセットアップがある場合(モック コラボレーターに対するいくつかの期待値のセットアップを含む)、Setup メソッドに移動します。(テスト内の読者に関係のない付随的な詳細については同上)
  • 1 つのテスト ケースで共通のセットアップを拡張したい場合は、特定のセットアップをテスト ケース自体にインラインで追加します。
  • 1 つのテスト ケースで別のセットアップが必要な場合(大幅な重複にもかかわらず)、別のテスト スイートに移動し、セットアップを共有するための他のメカニズムを見つけます (たとえば、構成、ユーティリティ メソッド、オブジェクト マザーなどを介して)。
于 2012-08-30T07:14:06.403 に答える