发布于 2026-01-06 1 阅读
0

ASP.NET Core 集成测试简介 IntegrationTestSample

ASP.NET Core 集成测试简介

集成测试示例

在这篇文章中,我将简要介绍如何测试 ASP.NET Core 控制器。

请注意,“集成测试”一词还涵盖其他情况,例如测试数据访问或访问文件系统。

项目设置

常见的 ASP.NET Core 项目结构设计原则是:

.
├── src
│   └── MyProject.Api
│       └── Controllers
│           └── ValuesController
└── test
    ├── IntegrationTests
    │   └── MyProject.Api.Test
    │       └── ValuesControllerTest
    └── UnitTests

安装 TestHost NuGet 包

创建一个 .NET Core 测试项目,然后安装该Microsoft.AspNetCore.TestHost包。
该包将提供配置选项TestServer

> Install-Package Microsoft.AspNetCore.TestHost

创建基类

创建一个基类,我们的ControllerTest其他类可以继承它。我们将设置TestServerHttpClient使用它来执行请求。

[TestClass]
public abstract class IntegrationTestInitializer
{
    protected HttpClient _client;

    [TestInitialize]
    public void Setup()
    {
        var builder = new WebHostBuilder()
            .UseStartup<Startup>();
        var server = new TestServer(builder);

        _client = server.CreateClient();
    }
}

创建一个ControllerTest

假设我们要测试的控制器如下所示

[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
    // GET api/values
    [HttpGet]
    public ActionResult<IEnumerable<string>> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

有了基类,我们就可以简单地继承基类,并使用我们的类_client来向 API 发出请求。

[TestClass]
public class ValuesControllerTest : IntegrationTestInitializer
{
    [TestMethod]
    public async Task CanGetValues()
    {
        List<string> expectedResponse = new List<string> { "value1", "value2" };

        var responseJson = await _client.GetStringAsync("api/values");
        List<string> actualResponse = JsonConvert.DeserializeObject<List<string>>(responseJson);

        Assert.AreEqual(expectedResponse.Count, actualResponse.Count);
        foreach(var expectedValue in expectedResponse)
        {
            Assert.IsTrue(actualResponse.Contains(expectedValue));
        }
    }
}

本文介绍了如何对一个非常基础的 ASP.NET Core API 进行集成测试。

在实际应用中,API 背后通常会有一个需要访问的数据库,而且某些端点可能还会受到 API 密钥或 JWT 的保护。
不过,本文仅作为集成测试的简要介绍。

GitHub 标志 kai-oswald / IntegrationTestSample

一个展示如何编写集成测试的 ASP.NET Core 示例项目

集成测试示例

一个展示如何针对控制器进行集成测试的 ASP.NET Core 示例项目

文章来源:https://dev.to/kao​​s/introduction-to-asp-net-core-integration-testing-1e77