0

いくつかのオープン ソース コードの単体テストを作成しようとしています。

テストの 1 つは、最小数のレコードのみがメモリにロードされていることをテストします (つまり、誰かが次のように呼び出した場合:

 DataContext.SomeTable.ToList().Where(s=>s.Id <=10)

テストは失敗するはずです)

これを機能させるには、単体テストを実行する前に、DataContext.SomeTable.Load をリセットして項目が 0 になるようにする必要があります。

現在、この TestFixture (nunit を使用していますが、関連性はありません) は抽象的であり、インスタンス化時に DbContext が挿入されているため、単体テストでさまざまなプロバイダーをテストできます。読み込まれたエンティティをクリアする方法があるとは思いませんが、注入されたコンテキストと同じデータベース プロバイダーを使用する新しい DbContext を破棄して作成する方法を知りたいと思っていました。

4

2 に答える 2

1

まず、コードを投稿していただけますか?

第二に、私の理解が正しければ、毎回コンテキストを再作成したいですか? 1 つの解決策は、コンテキスト自体ではなく、コンテキストを作成する関数を渡すことです。このような:

public class MyTest {

    private Func<IMyContext> createContext;

    public MyTest(Func<IMyContext> createContext){
       this.createContext = createContext;
    }

    [Test]
    public void RunTest(){
        using(var context = this.createContext()){
             // do stuff with context
        }
    }
}
于 2013-04-26T15:35:13.630 に答える
0
public class TestClass
{
    private MyContext context;

    [SetUp]
    public void Setup()
    {
        // is executed before each test
        context = new MyContext();
    }

    [Test]
    public void Test1()

        context.SomeTable.ToList().Where(s => s.Id <= 10);
    }

    [TearDown]
    public void Complete()
    {
        context.Dispose();
    }

}

各テストはテーブルに 1 回だけアクセスする必要があります。単体テストのポイントは、各テストが単一のシナリオ用であることです。

于 2013-04-26T10:36:28.370 に答える