0

xUnitを使用して.NET Coreアプリケーションの統合テストを作成しています。私はテストしたいことがいろいろありますが、簡潔にするためにこの例を使用します。従業員として 統合テストでテストデータを追加する

  • が従業員のために新しいドキュメントを追加して

    • 登録新入社員
    • ログイン:私はこれらの事をテストする必要があります(「文書」は、私はファイルを扱うないよ単なる文字列です)
    • 文書にコメントを追加

    テストは、それぞれ独立して実行することになって、もちろんですが、私は存在しない文書にコメントを追加することはできません。私はコメントを追加するテストするために存在するドキュメントが必要ですが、従業員はまた文書を追加する必要があります。

    私が使用するすべてのエンティティのために書かれたテストクラスを持っているが、私は実際に与えられたテスト用のデータベースにそれらを取得する方法がわかりません。どのように私は与えられたテストのためにDBを "シード"できますか?

    TestStartup.cs

    public class TestFixture : IDisposable 
    { 
        readonly TestServer _server; 
        public HttpClient _client { get; } 
    
        public TestFixture() 
        { 
         var builder = new WebHostBuilder() 
          .UseContentRoot(@"..\..\..\..\..\src\MyProj.Web") 
          .UseEnvironment("IntegrationTestDevelopment") 
          .UseStartup<Web.Startup>(); 
    
         _server = new TestServer(builder); 
    
         _client = _server.CreateClient(); 
         _client.BaseAddress = new Uri("http://localhost:2856"); 
        } 
    
        public void Dispose() 
        { 
         _client.Dispose(); 
         _server.Dispose(); 
        } 
    } 
    

    Web.Startupの関連部分:

    services.AddEntityFrameworkInMemoryDatabase() 
        .AddDbContext<MyContext>(options => options.UseInMemoryDatabase()); 
    

    例のテストクラス:

    public class EmployeeTests : IClassFixture<TestFixture> 
    { 
        public HttpClient _client; 
    
        public EmployeeTests(TextFixture fixture) 
        { 
         _client = fixture._client; 
        } 
    
        [Theory] 
        [MemberData("ValidRegistrations")] 
        public async Task Register_new_employee_succeeds(EmployeeModel model) 
        { 
         var request = Helpers.CreateRequestMessage("POST", "/api/employees", model); 
         var response = await _client.SendAsync(request); 
         Assert.Equal(HttpStatusCode.Created, response.StatusCode); 
        } 
    } 
    
  • +0

    https://docs.efproject.net/en/latest/miscellaneous/testing.html#sharing-a-database-instance-for-read-only-testsによると、必要なDBエンティティを適切なテスト設定メソッド、コンストラクタなど – Eris

    答えて

    0

    私は(ここでの知識を何かが欠けているが、決して使用することができます、 .Net Core)ですが、これは純粋なユニットではなく統合テストです

    • 統合テストでは、単にサービスへのコール/接続をテストするだけです(つまり、データベースの内容に関係なく、「従業員」は自分のシナリオで考えることができるかどうかをテストします)
    • 上記ISN場合は」

    を新しいテスト作成(理想的には、ユニットテストを、しかし、のは、統合テストは間違いなくこの世界で場所を持ってそれに直面してみましょう)「従業員のメソッド/関数の機能をテストしますあなたのためのオプションは、どのようにテストクラス(メソッドまたはクラスの設定メソッドのいずれかのDBをシードすることを検討することについて - 私は彼らのnを忘れるxUnit内のames)をシンプルなデータベースインタラクションコードを呼び出すことで呼び出すことができます。それは単なる種であればエキゾチックでもファンシーでもありません。おそらく基本的なdb接続とクエリの実行で十分でしょう。

    が、これは直接あなたの質問、部外者の視点の多くを答えていません感謝しています。