asp.net-core - 当断言函数返回预期的 DTO 对象时,如何在 DTO 对象类的 getter 上获得 100% 的测试覆盖率?
问题描述
我通过断言我的 repo 层返回 DTO 对象来对 ASP.Net Core API 进行单元测试。当我测试行为时,我并不关心我的 DTO 对象有什么值,所以我使用 AutoFixture 自动生成它们。我也在努力满足我公司的代码气味检查,这要求我们的 PR 具有接近 100% 的测试覆盖率。当我模拟我的 ORM 以在调用时返回我的 DTO 对象,而被测函数又返回该对象时,我最终得到的实际对象与我的预期相同。当使用流利的断言进行断言时,它会看到对象引用相等并通过了我的测试。但是对于测试覆盖率,我不会看到 DTO 属性的 getter 的覆盖率。如果对象引用不同,流利的断言调用getter。
我试过使用ComparingByValue<T>
and ComparingByMember<T>
。我也试过IncludingProperties()
, IncludingMembers()
,IncludingAllDeclaredProperties()
和IncludingAllRuntimeProperties()
.
[Fact]
public void GivenObjectReferenceIsTheSame_FluentAssertionDoesntCallTheGetters()
{
var someDTO = _fixture.Create<SomeDTO>();
var otherDTO = someDTO;
otherDTO.Should().BeEquivalentTo(someDTO);
}
[Fact]
public void GivenObjectReferenceIsDifferent_FluentAssertionCallsTheGetters()
{
var someDTO = _fixture.Create<SomeDTO>();
var otherDTO = JsonConvert.DeserializeObject<SomeDTO>(JsonConvert.SerializeObject(someDTO));
otherDTO.Should().BeEquivalentTo(someDTO);
}
我想要一种方法来始终强制流利的断言调用 getter,以便在 DTO 上获得测试覆盖率,而不必在 DTO 上显式编写无用的测试
解决方案
简短的回答是你不能。您已要求 FA 断言对象是等价的,事实上,它们是相同的。这满足了 FA 试图做的事情。唯一的选择是传入另一个实例,该实例的属性设置为期望值。这甚至可以是一个匿名对象。ComparingByValue
仅对强制 FA 忽略Equals
实现并比较各个字段和属性有用。
推荐阅读
- node.js - UnauthorizedError:无效算法 - Node.js express-jwt
- sql - 如何找到一年多一天订单超过 1 笔的客户
- asp.net - 创建表时出错:指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束
- node.js - URL 解析 NodeJS 已弃用
- javascript - 在 JavaScript 中将圆转换为折线
- python - 如何在两个 forloops 中获取 forloop.counter
- docker - docker-compose 启动单个容器
- python - 将特定公式应用于熊猫数据框
- html - 如何在高度为 100Vh 的页面上添加 100vh 的标题图像?
- windows - PowerShell中的管道:不将参数绑定到参数
因为它是空的