在集成測試中添加測試數據

asp.net-core c# entity-framework-core integration-testing xunit

我正在使用xUnit為我的.NET Core應用程序編寫集成測試。我有各種我想測試的東西,但為了簡潔起見,我將使用這個例子。我需要測試這些東西(“document”只是一個字符串,我不處理文件):

  • 註冊新員工
  • 以員工身份登錄
  • 為員工添加新文檔
  • 在文檔中添加註釋

測試當然應該彼此獨立運行,但我不能在不存在的文檔中添加註釋。我需要存在文檔來測試添加註釋,但員工必須存在才能添加文檔。

我為我想要使用的所有實體編寫了測試類,但我不知道如何在給定測試的數據庫中實際獲取它們。如何為給定的測試“播種”數據庫?

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);
    }
}

熱門答案

我可能在這裡缺少一些東西(知識,但從未使用過.Net Core),但正如你所說這是一個集成測試而不是純單元測試,所以另一種方法是:

  • 集成測試只是測試服務的調用/連接(即測試在我的場景中可以調用'員工' - 無論數據庫內容如何)
  • 創建一個新的測試(理想情況下是一個單元測試,但讓我們面對它的集成測試肯定在這個世界中佔有一席之地)來測試'employees'方法/功能的功能

如果以上不是你的選擇,那麼考慮通過調用簡單的數據庫交互代碼來考慮在測試類(方法或類設置方法之一 - 我忘記它們在xUnit中的名稱)中播種數據庫怎麼樣,沒有如果它只是一個種子,接著是隨後的測試結束後的撕裂,那就是任何異國情調或幻想。基本的數據庫連接和查詢執行可能就足夠了。

欣賞這不會直接回答你的問題,更多的是局外人的觀點。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因