0

graphql-dotnetを使用している小さなGraphQLサーバーの統合テストを作成しようとしています。 Webアプリケーションを使用すると、サーバーは正常に動作しています。AspNetCore.TestHostとEntityFrameworkCore.InMemoryのデータを失う

統合テストを実行するには、Microsoft.AspNetCore.TestHostを使用してサーバーを構成し、POST要求を送信しようとしています。また、私はMicrosoft.EntityFrameworkCore.InMemoryを使用して、ローカルで実行されている「実際の」データベースではなく、メモリ内のデータベースを使用しようとしています。私はSaveChangesメソッドを呼び出した後にデータベースの内容をプリントアウトしてきました

public void ConfigureServices(IServiceCollection services) 
{ 
    services.AddMvc(); 

    services.AddDbContext<MyDbContext>(options => 
     options.UseInMemoryDatabase() 
    ); 

    ... 
} 

public void Configure(
     IApplicationBuilder app, 
     IHostingEnvironment env, 
     MyDbContext myDbContext) 
{ 
    myDbContext.Categories.Add(new Category {Id = 1, Name = "Category 1" }); 
    myDbContext.SaveChanges(); 
    app.UseMvc(); 
} 

()と:

は、私は、インメモリ・データベースを設定し、単一のレコードを保存しようとTestStartUp.csファイルを持っていますオブジェクトが保存されていることを確認しました。しかし、リポジトリオブジェクトが注入されたMyDbContextオブジェクトのすべてのカテゴリを取得しようとすると、カテゴリが存在しないことが示されます。

私はさまざまな構成を無駄にしようとしました。メモリにないデータベースを使用するとうまくいくので、私には紛失しているものがあります。私は怒っているので、どんな援助も非常に感謝しています!

+0

はあなたのセットアップインメモリ・データベースおよび個別にすべてのテストのためのテストホストをしましたか? IMOこれが唯一の方法です。すべてのテストホストに対して新しい空のインメモリDBが得られるからです。私はこの問題を避けるために、すべてのテストでテストホストを共有しません。テストを分離したままにしておきます。 –

+0

問題はStartup.csが別のサービスプロバイダを作成していることが原因であることが判明しました。一度それがきれいにされたものは期待どおりに働いた。ありがとう! – Blather

答えて

1

InMemoryDatabaseをごくわずかな場所で使用するには、毎回同じデータベースオプションを指定する必要があります(同じデータベースを使用する必要があります)。見て怒鳴るください:

protected DbContextOptions<BackofficeContext> GetDbContextOptions() 
    { 
     return new DbContextOptionsBuilder<BackofficeContext>().UseInMemoryDatabase(NAME_OF_YOUR_IN_MEMORY_DATABASE).Options; 
    } 

をそして、あなたはそのような何かを行うことができます。

var databaseOptions = GetDbContextOptions(); 

using (var context = new MyContext(databaseOptions)) 
{ 
    //Add some data to the database 
    context.SaveChanges(); 
} 

using (var context = new MyContext(databaseOptions)) 
{ 
    //Recieve data from the database 
} 
関連する問題