【问题标题】:Is unit testing skinny controllers really necessary?单元测试瘦控制器真的有必要吗?
【发布时间】:2015-09-21 16:43:31
【问题描述】:
我想知道你们是否对控制器进行单元测试,以及这是否是 TDD 环境中的常见做法。
我所拥有的是 瘦控制器,它们基本上调用 业务层 获取逻辑和数据,然后 填充本地 ViewModel 以传递到视图。
我对业务层进行了单元测试,但我想知道测试这些瘦控制器是否仍然有意义,或者它真的没有必要,除非你有一个包含大量逻辑的胖控制器。
请告诉我你的想法。
谢谢。
【问题讨论】:
标签:
asp.net-mvc
unit-testing
tdd
【解决方案1】:
为类创建一个 UT,而他所做的只是将呼叫从一个点转发到另一个点,这不是一个好主意。原因很简单:它只是不值得......你不会从这些测试中获得任何好处,而且你将不得不随着时间的推移维护这些测试,而你不会验证任何行为(只是结构...)
那么我如何覆盖这些单位?方法也很简单;只需将它们作为使用它们的东西的一部分进行测试。
现在回到最初的问题...我发现测试我的瘦控制器的方法是通过组件/集成测试。我从 BL 开始,当我必须将 BL 与控制器耦合时,我创建一个组件/集成测试,然后以控制器实现结束任务。
【解决方案2】:
根据经验,我不会费心去测试没有任何逻辑的东西。仅仅调用另一个对象几乎不能算作逻辑 IMO。按顺序调用多个其他对象更值得商榷。
如果我使用由外向内的方法,我会做的就是在我进一步向食物链上游并实现真正的依赖项之前,通过删除其依赖项(业务服务、映射器等)来对控制器进行 TDD。但我很少明确断言依赖项应该按特定顺序调用。归根结底,这些测试更多的是关于设计而不是证明正确性,一旦编写了整个类图,您就可以合理地删除它们。
【解决方案3】:
就个人而言,没有。但我通常也不做 TDD。
如果您确实先编写了测试,那么您不妨离开它们。他们没有伤害任何东西。
如果您没有先编写测试,我同意以后添加它们是没有意义的,因为此时您基本上是在测试 MVC 框架。