2

現在、モッキング ライブラリを使用してコードの単体テストを行っています。私は今、すべてがデータベースでうまく機能し、期待どおりに機能することをテストしたいところです。

多くの単体テストをコピーして、テスト データベースを使用するように調整することは理にかなっていますか?

4

3 に答える 3

3

テストをコピーしないでください。

以前にこれを行って、異なるバージョンの MySQL と SQL Server に対してテストしました。私が遭遇した問題の 1 つは、MySQL Server のインスタンスが Windows または UNIX で実行されている場合に、テーブルなどに名前を付けるときに MySQL が「ケース」をどのように処理するかということでした。したがって、さまざまなデータベース エンジンに対して統合テストを実行できることは、かなり価値があることが証明されています。

次のパターンをお勧めします。MSTestを使用して行われますが、他の人に適応させることができます. IMyRepository は、データベース ロジックをラップするインターフェイスであると想定しています。

[TestClass]
public abstract class MyTestBase 
{
    protected abstract IMyRepository CreateRepository();

    [TestMethod]
    public void MyTest1()
    {
        // use IMyRepository
        // execute tests
    }
}

[TestClass]
public sealed class MyUnitTest : MyTestBase
{
    protected abstract IMyRepository CreateRepository()
    {
        IMyRepository mockedRepository = /* create a mock */;
    }

    // additional unit tests that are not dependent upon database
}

[TestClass]
public sealed class MyIntegrationTest : MyTestBase
{
    [TestSetup]
    public void TestSetup()
    {
        // configure the database to be pristine
    }

    [TestCleanup]
    public void TestCleanup()
    {
        // dispose of database connections etc.
    }

    protected abstract IMyRepository CreateRepository()
    {
        IMyRepository mockedRepository = /* create real repository */;
    }
}

もう 1 つの方法は、IMyRepository の統合テストのみを作成することです。これにより、異なるデータベース エンジンが使用されます。ビジネス ロジックのテストでは、単純に IMyRepository をモックします。ビジネス ロジックがデータベースの問題をシミュレートし、IMyRepository がデータベースの問題を適切にカプセル化する場合、ビジネス ロジックを 2 回テストする価値はありません。

于 2012-10-02T04:33:10.680 に答える
2

テストにもよりますが、彼らが何をしているかについてもっと詳しく知る必要があります。

ただし、テストをコピーするだけの場合は、両方のコピーを維持する必要があります。おそらく、同じテストを 2 つのモードで実行することができます。1 つのモードでは模擬インフラストラクチャを使用し、もう 1 つのモードでは実際の (テスト) インフラストラクチャを使用します。これをどのように行うかは、モックをどのように行ったか、および構成システムがどのように機能するかによって異なります。

于 2012-10-02T04:18:01.777 に答える
0

何かをする前に、あなたの目標が何であるかを考えてください。統合テストをやり過ぎてしまうのは簡単で、実行に時間がかかるが実際には何の価値ももたらさない多くのテストになってしまいます。

そうは言っても、統合テストのテンプレートとして最高レベルの単体テストを使用することには、いくつかの利点があります(最高レベルはデータベースから最も遠いことを意味します)。これらのテストは、そのサービスの機能について期待しているため、実際の依存関係、サービス、およびデータベースをプラグインすると、そのスライスの優れたテストが得られます。これは完全なテストではありませんが、すべてが期待どおりに機能することを確認します。

于 2012-10-02T04:21:42.437 に答える