2016-04-28 18 views
1

真のユニットテストがデータベースなどの外部システムと厳密にやりとりする必要があるかどうかはわかりませんが、私のセットアップコードはDBが特定の状態にあることを保証します私の単体テストは呼び出されるメソッドからの特定の結果を期待しています。私はDBアクセスコードが正しいことをしていることを確認する必要があります。複数のユニットテストクラス間でDB設定データを共有

複数のテストクラスで同じDBテストデータを使用し、それを各クラス '[TestInitialize]にコピー&ペーストしないで、これを行うにはどうすればよいのでしょうか。外部の.sqlスクリプトの

  1. 投げそれをすべてと私はDBを更新するためのコードを好むだろう

静的メソッドとヘルパークラスのこの

  • いくつかの並べ替えを実行します。オプションが含まれているように見えます私のC#コードの一部ですが、MSTestプロジェクトがこれを処理する典型的な方法があるのだろうかと疑問に思っていましたか?

  • +0

    外部システムを参照することは悪い考えです。私はあなたのデータアクセス層とあなたのビジネス層の間に層を作成することを好む。たとえば、データアクセスのメソッドやプロパティを持つインターフェイスがあります。これはテストすることができます。 –

    +0

    私は一般的に同意すると思いますが、これがどのように設定されているのですか。それはあなたがより幸せになる場合、それは別のタイプのテストと呼んでください:)統合? –

    +0

    各テストごとにDbをリセットする必要があるのか​​、それともすべてのテストで使用するのか。 – Nkosi

    答えて

    2

    継承を使用して、複数のユニットテストクラス間でセットアップデータを共有できます。

    ベーステストクラスを作成し、それを継承するクラスを作成することができます(それぞれのテストで呼び出される[TestInitialize]を含む)。

    は、テスト構造がどのように見える可能性が参照するために上記のリンクを使用して、すべてのテスト

    のための一般的なセットアップコードを持って試験用テスト構造を使用する方法を示している、この記事で、Structuring Unit Testsを見てみましょう...

    [TestClass] 
    public partial class DbTests { 
        protected DbContext db;  
    
        [TestInitialize] 
        public virtual void Init() { 
         //Virtual so it could be overridden in derived classes if needed. 
         //...check the DB-access code is doing the right thing. 
        } 
    
        [TestClass] 
        public class Test1 : DbTests { 
         [TestMethod] 
         public void Should_Do_Some_Test(){...} 
    
         [TestMethod] 
         public void Should_Do_Some_Db_Test(){...} 
        } 
    
        [TestClass] 
        public class Test2 : DbTests { 
         [TestMethod] 
         public void Should_Do_Some_Other_Test(){...} 
        }  
    } 
    

    私は上記のフォーマットを使用して、共通のセットアップコードを共有するテストを構成します。

    関連する問題