2016-07-23 21 views
0

ユニットテストを書くASP.NET MVCコアアプリケーションがあります。私はInMemoryDatabaseを使用しています。私はテストを実行するために一度データベースを初期化したい。単一のテストクラス(たとえば、HomeControllerTests)とそのすべての特定のテストのために素晴らしい作品ユニットテスト全体でInMemoryDatabaseを再利用

public static class DbInitialize { 
    private static MyDbContext _db; 

    public static MyDbContext Initialize() { 
     if (_db != null) { 
      return _db; 
     } 
     DbContextOptionsBuilder<MyDbContext> optionsBuilder = new DbContextOptionsBuilder<MyDbContext>(); 
     optionsBuilder.UseInMemoryDatabase(); 
     _db = new MyDbContext(optionsBuilder.Options); 
     ....... (populating mock data) ............. 
     _db.SaveChanges(); 
     return _db; 
    } 
} 
:だから、私は、静的なクラスを持っています。しかし、別のテストクラス( CustomerControllerTests)を持っていて DbInitialize.Initialize()と呼んだ場合 - _dbがnullだとわかりますが、データベースは破棄されませんでした。 SaveChanges()の間にキーエラーが発生します。 を1回だけのデータベースを初期化する良い方法はありますか?それが既に稼働している場合は、「接続文字列」を入手してください。

+0

オプション(データなし)で毎回 'DbContext'を再作成するとどうなりますか? –

+0

@GabrielGM - 私はあなたの質問を理解するか分からない。データなしでDbContextを作成した場合、データがなく、単体テストが失敗することを除いて、何も悪いことはありません。 – Felix

+0

あなたは '_db'がメモリに存在していてもnullであると言っています。それが起こると、 '_db'を再作成できますか?つまり、最初に作成してシードします。その後、作成してください。 –

答えて

0

xUnitの答えは、まさにこの状況 - Collection Fixtureです。私はそこに指示に従って、それはうまくいった。うまくいけば、他の誰かにも役立つでしょう:)

関連する問題