【问题标题】:What part of project to test first?首先要测试项目的哪个部分?
【发布时间】:2014-03-11 13:00:36
【问题描述】:
我想写我人生中的第一个单元测试。
目前,我正在开发新的 ASP.NET MVC 5 项目。这是一个简单的工作流系统。我的项目包含 4 层:
- Presentaton 层(一个 MVC 项目)
- 基础架构层(包含存储库和 ORM)
- 域(包含 POCO 类和业务逻辑接口)
- 服务层(实现领域接口)
我相信,我首先需要测试服务层。那正确吗?我应该先测试哪一层?
【问题讨论】:
标签:
unit-testing
asp.net-mvc-5
service-layer
【解决方案1】:
没有唯一正确的方法,但最常见的技术是
-
自上而下,也称为Outside-In。在这里,您从外层开始,逐步进入。
-
自下而上。在这里,您从组成构建块开始,并将它们组装成一个工作系统。
正如Code Complete 所描述的那样,交替使用双重方法实际上可能是有益的,因为您从做一件事中学到的东西可以帮助您更好地了解另一端需要做什么,反之亦然。我经常做一些由外而内,然后是一些自下而上,然后是更多的由外而内,等等。
【解决方案2】:
根据Mark Seemann's answer,您可以先从 UI 层进行测试,然后在数据层完成,或者反过来。
谁负责该项目?项目的哪个部分对业务至关重要?与其“水平”测试每一层,不如“垂直”测试所有层的特定功能。
这使您受益于基于业务优先级的覆盖范围,并且您可以在开始测试每个功能时在所有层上应用您需要进行的任何可测试性更改或技术。
由于您已经编写了代码,因此请准备好重构一些代码以使其更具可测试性(例如设置依赖注入以隔离代码以进行单元测试)并记下这些更改以帮助将来进行可测试性设计。