自动化测试
介绍
ABP 在设计时就考虑了可测试性。自动化测试包含几个不同的层次:
- 单元测试:通常测试单个类(或少数几个类一起)。这类测试速度很快。然而,你通常需要为所测服务的依赖项处理模拟(Mocking)。
- 集成测试:通常测试一个服务,但这次你不模拟基础基础设施和服务,以观察它们是否能正确地协同工作。
- UI 测试:测试应用程序的用户界面,就像用户与你的应用程序交互一样。
单元测试与集成测试对比
与单元测试相比,集成测试有一些显著的优势:
- 编写更简单,因为你无需费力建立模拟和处理依赖项。
- 你的测试代码与所有真实的服务和基础设施(包括数据库映射和查询)一起运行,因此更接近于真实应用程序的测试。
但它们也有一些缺点:
- 由于每个测试用例都需要准备所有基础设施,因此它们比单元测试慢。
- 一个服务中的错误可能会导致多个测试用例失败,因此在某些情况下可能更难找到真正的问题。
我们建议混合使用:在必要且你认为编写和维护有效的的地方编写单元测试或集成测试。
应用程序启动模板
应用程序启动模板 已为你正确安装并配置好了测试基础设施。
测试项目
请看 Visual Studio 中的以下解决方案结构:
有多个测试项目,按层组织:
Domain.Tests用于测试你的领域层对象(如 领域服务 和 实体)。Application.Tests用于测试你的应用层(如 应用服务)。EntityFrameworkCore.Tests用于实现抽象测试类,并测试你的自定义仓储实现或 EF Core 映射(如果你使用其他 数据库提供程序,此项目会有所不同)。Web.Tests用于测试 UI 层(如页面、控制器和视图组件)。此项目仅存在于 MVC / Razor Pages 应用程序中。TestBase包含一些被其他项目共享/使用的类。
HttpApi.Client.ConsoleTestApp不是一个自动化测试应用程序。它是一个示例控制台应用程序,展示了如何从 .NET 控制台应用程序消费你的 HTTP API。
接下来的章节将介绍这些项目中包含的基类和其他基础设施。
测试基础设施
启动解决方案已经安装了以下库:
- xUnit 作为测试框架。
- NSubstitute 作为模拟库。
- Shouldly 作为断言库。
虽然你可以自由地将它们替换为你喜欢的工具,但本文档和示例将基于这些工具。
测试资源管理器
你可以使用测试资源管理器在 Visual Studio 中查看和运行测试。对于其他 IDE,请参阅其各自的文档。
打开测试资源管理器
如果尚未打开,请打开 测试 菜单下的 测试资源管理器:
运行测试
然后,你可以点击 全部运行 或 运行 按钮来运行测试。初始启动模板为你提供了一些示例测试:
并行运行测试
测试基础设施兼容并行运行测试。强烈建议并行运行所有测试,这比逐个运行要快得多。
要启用它,请点击设置(齿轮)按钮附近的插入符号图标,然后选择 并行运行测试。
抠丁客






