ASP.NET Core - UnitTest
在 ASP.NET Core 上进行单元测试
首先我们先添加一个项目
用于进行基于 xUnit 的测试
xUnit 和 传统的测试的区别在于:
....
之后我们先来测试控制器
我们创建一个跟控制器同名带 Test 结尾的类
using Xunit; public class CategoryControllerTest { }
之后在这个类中
填写对应的 Action 的测试方法
[Fact] public void GetTest() { //Arrange var options = new DbContextOptionsBuilder<SchoolDbContext>() .UseInMemoryDatabase(databaseName: "MyDb1") .Options; CategoryInit.Init(options); var queryInput = new QueryInputModel(); var pageInput = new PagingInputModel(); using (var context = new SchoolDbContext(options)) { // Act var controller = new CategoryController(context); var result = controller.Get(queryInput, pageInput); // Assert Assert.NotNull(result); } }
这里采用了 3A 测试结构
所谓的 3A 指的是
Arrange: 准备测试环境, 就是实例化一些测试用例什么的
Act:测试用调用方法, 就是调用测试目标
Assert:断言, 就是判断测试是否出错
值得注意的是
一般来说我们的 Mvc 都是用依赖注入的方式去传递对象的
但是这里测试的话, 目前来说我更倾向于自己创建实例化的方法
对 DbContext 来说, 可以创建一个内存数据库去模拟假的数据
能更好的模拟生产情况下的数据库表现
另外还有一点原则就是, 不要在一个方法里面去测试多个行为
Controller.Action 本身来说只是接受参数, 然后执行了方法之后返回一个视图
这里测试不需要关心执行了什么方法, 而是只要能接收到正确的视图即可
更详细的业务测试可以另外新建一个专门去测试业务层
这里为了方便都合在一起了, 严格来说这样是不规范的
另外要值得注意
针对异步控制器的测试好像还存在一些问题, 这里最好再仔细研究下,