.NET Core 5使用Moq时如何对返回自定义类的方法做单元测试断言
针对CheckResult返回值的单元测试断言方案
以下是不同场景下的常用写法:
1. 单元测试框架原生断言(xUnit/NUnit通用)
直接分别校验两个属性即可,兼容性最高无需引入额外依赖:
// 调用待测方法获取返回值 CheckResult actualResult = 待测服务实例.待测方法(入参); // 逐属性断言 Assert.True(actualResult.ShouldBeFlagged); Assert.Equal(2000M, actualResult.ExeededAmount);
2. FluentAssertions 简化写法(推荐)
如果项目引入了FluentAssertions断言扩展库,可以直接做对象全属性匹配,代码可读性更高、属性多的时候更高效:
actualResult.Should().BeEquivalentTo(new CheckResult { ShouldBeFlagged = true, ExeededAmount = 2000M });
该写法会自动对比两个实例的所有公开属性,只要有一个属性不匹配就会抛出断言失败信息,同时会自动打印差异值方便排查。
3. Moq 依赖方法返回值验证场景
如果你需要验证Moq模拟的依赖方法被调用时返回的CheckResult符合预期,写法如下:
// 示例:验证模拟的ICheckService的RunCheck方法被调用1次,且返回值符合要求 mockCheckService.Verify(s => s.RunCheck(It.IsAny<你的入参类型>()), Times.Once) .Returns(new CheckResult { ShouldBeFlagged = true, ExeededAmount = 2000M });
如果需要捕获返回值做二次校验,也可以通过Callback把返回值存到本地变量后,再用前两种方式做断言。
内容的提问来源于stack exchange,提问作者moris62
相关产品推荐
相关产品推荐

