[Fact]
public async Task GetById_ShouldBe_Ok()
{
// Arrange
var id = 1;
// Act
var response = await Client.GetAsync($"/api/values/{id}");
// Output
var responseText = await response.Content.ReadAsStringAsync();
Output.WriteLine(responseText);
// Assert
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}
运行(注意不是 Debug)此方法,运行结束后,在“Test Explore”的下方可以可以看到“Output”字样,点击它就可以看到输出的结果,如图:
通过这种方式,每次运行测试我们就可以很方便的查看输出结果了。
其它
上面我们是通过模拟 Http 请求的方式来调用 API 测试的,还有一种就是 new 一个 Controller 来直接调用它的 Action 方法来测试。比如这样:
// Arrange var id = 1; var controller = new ValuesController(); // Act var result = controller.Get(id);
如果 Controller 没有其它依赖,这种方式当然是最方便的。但通常 Controller 是会有一个或多个依赖的,比如这样:
public class ValuesController : Controller
{
private readonly ISessionRepository _sessionRepository;
public ValuesController(ISessionRepository sessionRepository)
{
_sessionRepository = sessionRepository;
}
// ...
}
我们就要模拟实例化这个 Controller 的所有依赖,当然手动模拟是不现实的,因为一个依赖类还可能会依赖其它的类或接口,依赖链可能很长,你不可能每个依赖都手动去实例化它们。有一个叫 Moq 的工具可以自动来模拟实例化依赖,它的用法是这样的:
// .. // Arrange var mockRepo = new Mock<ISessionRepository>(); mockRepo.Setup(...); var controller = new HomeController(mockRepo.Object); // Act var result = await controller.Index();
这种方式我是不推荐的,因为抛开 Moq 的学习成本不说,重要的是它不如模拟 Http 请求那样接近真实的调用场景,所以本文对它不作过多的介绍,大家知道有这么回事就行。
以上就是xUnit 编写 ASP.NET Core 单元测试的方法的详细内容,更多关于xUnit 编写 ASP.NET Core 单元测试的资料请关注易采站长站其它相关文章!








