我目前正在为ASP.Net MVC应用程序奠定基础,并且正在研究应该准备编写哪种单元测试。我已经在多个地方看到人们在本质上说:“不要打扰测试您的观点,没有逻辑,这是微不足道的,将被集成测试所涵盖”。
我不明白这如何成为公认的智慧。集成测试的目的与单元测试的目的完全不同。如果我中断了某些事情,我不想在半小时后的集成测试中断时就知道,我想立即知道。
示例场景: 假设我们正在与一个Customer实体一起处理标准的CRUD应用。客户有名字和地址。在每个测试级别,我都想验证客户检索逻辑是否正确获取名称和地址。
为了对存储库进行单元测试,我编写了一个集成测试来访问数据库。为了对业务规则进行单元测试,我模拟了存储库,为业务规则提供适当的数据,并验证是否返回了预期的结果。
我想做的是: 为了对UI进行单元测试,我模拟了业务规则,设置了预期的客户实例,渲染了视图,并验证视图是否包含我指定的实例的适当值。
我要做的事情: 要对存储库进行单元测试,我编写了一个集成测试,设置了适当的登录名,在数据库中创建了所需的数据,打开浏览器,导航到客户,并验证结果页面是否包含适当的内容我指定的实例的值。
我意识到上面讨论的两种情况之间存在重叠,但是关键的区别在于设置和执行测试所需的时间和精力。
如果我(或另一个开发人员)从视图中删除了地址字段,则我不想等待集成测试发现这一点。我希望在每天多次获取的单元测试中被发现并标记出来。
我感到我只是没有掌握一些关键概念。有人可以解释为什么要对MVC视图的有效性立即进行测试反馈是一件坏事吗?(或者,如果还不错,则不是获得所说反馈的预期方式)
"To unit-test the repository, I write an integration test"
等等...什么 这不是存储库的单元测试。您正在为其自动化测试,但是被测代码仍然包括DAL和数据库。要对存储库进行单元测试,您需要像对待业务规则一样对它进行隔离。