And*_*cus 9 .net c# unit-testing fluent-interface
我通过方法链创建了一些小的流畅接口.它们通常调用许多从Web服务/数据库获取数据的存储库.
我该如何进行使用流畅界面的单元测试方法?
Public IEnumberable<Computer> FindComputers(string serialNumber)
{
return Computers.FindBySerialNumber("YBCX00900")
.AttachConfiguration()
.EnsureAllComputersHaveConfiguration();
}
Run Code Online (Sandbox Code Playgroud)
我可以对流畅的界面的各个组件进行单元测试,但如果我想对上面的FindComputers方法进行单元测试,我该怎么办?
我想找到一种易于维护的方法.
我认为金融机构所做的超出了其需要的范围。我假设您使用计算机作为数据映射器,并使用它来构建查询。根据您所显示的内容,查询是这样构建的:
rule 1: find configured computer with serial number = "whatever" and has-config = true.
rule 2: find not-config computer with serial number = "whatever and has-config = true.
rule 3: find configured computer with serial number = "whatever" and has-config = false.
rule 4: find not-config computer with serial number = "whatever" and has-config = false.
rule 5: find all computer with serial number = "whatever" and has-config = true.
rule 6: find all computer with serial number = "whatever" and has-config = false.
Run Code Online (Sandbox Code Playgroud)
等等...
现在这些可以实施的规则中有些似乎是不正确的。规则 2 和规则 3 似乎是相互矛盾的。规则5和规则6的作用是什么?这大约是对的吗?
因为您已经实现了一个破坏 SRP 的对象。第一步是从数据映射器中分离查询构建器。构建您的 FI 查询对象,然后将其传递到映射器中。
现在您可以测试FindComputers,确保 FI 查询对象发送到数据映射器。因为您现在可以构建 FI 查询对象,所以您可以对其进行测试。您可以测试数据映射器是否使用查询对象。
如果将来您想按位置查找计算机怎么办?如果您保留与编写的代码相同的代码,则必须添加一个FindByLocation方法,并且在您意识到之前您就拥有了一个上帝对象。臭!
归档时间: |
|
查看次数: |
1974 次 |
最近记录: |