SRP使类难以测试

时间:2012-08-02 19:57:17

标签: unit-testing mocking single-responsibility-principle

在重构一些旧的遗留代码时,我尝试尽可能多地应用单一责任原则,因此我最终得到了许多只有一个目的的类。这很好,但是当我尝试为这些新类编写单元测试时问题就出现了。有些类很难测试,因为测试很难设置。我需要创建类似4-5个模拟/存根来编写单个测试用例,如果我想要覆盖所有代码,我需要编写几个测试用例,这只是一个痛苦的屁股。

难以设置测试(因为它取决于许多其他类)是代码味道?你是怎么解决的?

2 个答案:

答案 0 :(得分:3)

以下是Uncle Bob says about SRP

  

一个班级应该有一个,而且只有一个改变的理由。

请注意,它并没有说“一个班级只做一件事,只有一件事。”换句话说,如果除了其中一项责任之外的所有责任都是不变的或者它们都会一起改变,那么一个班级就有多个责任是完全有效的。

在他的Agile Patterns, Principles, and Practices书中,鲍勃叔叔说:

  

在SRP的背景下,我们将责任定义为变革的原因(117)。

  

另一方面,如果应用程序没有以导致[多个]职责在不同时间进行更改的方式发生变化,则无需将它们分开。实际上,将它们分开会闻到不必要的复杂性。 (118)

也就是说,一个有太多合作者的班级是一种气味,应该仔细检查。

答案 1 :(得分:0)

  • 您不需要覆盖所有代码,使用常识
  • 对于小类,应该很容易确定不变量,所以用断言填充它们并让代码自己测试
  • 将您的系统拆分为多个层,并定义可以插入模拟激励的位置,以使这些断言起作用并验证输出