unit-testing - SRP 使类(class)难以测试

标签 unit-testing mocking single-responsibility-principle

在重构一些旧的遗留代码时,我尝试尽可能多地应用单一职责原则,所以我最终得到了许多只有一个目的的类。很好,但是当我尝试为这些新类编写单元测试时,问题就来了。有些类(class)真的很难测试,因为测试很难设置。我需要创建大约 4-5 个模拟/ stub 来编写一个测试用例,如果我想覆盖我的所有代码,我需要编写几个测试用例,所以这很麻烦。

很难设置测试(因为它依赖于许多其他类)是一种代码味道吗?你如何解决这个问题?

最佳答案

这是Uncle Bob says about SRP :

A class should have one, and only one, reason to change.

请注意,它并没有说“一个类做一件事而且只做一件事”。换句话说,如果除了其中一项职责以外的所有职责都是不变的,或者如果它们都一起改变,则一个类拥有多个职责是完全有效的。

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

In the context of SRP, we define a responsibility to be a reason for change (117).

和:

If, on the other hand, the application is not changing in ways that cause [multiple] responsibilities to change at different times, there is no need to separate them. Indeed, separating them would smell of needless complexity. (118)

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

关于unit-testing - SRP 使类(class)难以测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11784836/

相关文章:

django - 如何对生产数据库运行单元测试?

java - 如何对使用 ProcessBuilder 和 Process 的 Java 方法进行单元测试?

model-view-controller - 可能违反单一职责原则的 Controller ?

oop - 您如何定义单一职责?

oop - 单一职责原则在 OOP 中有效吗?

unit-testing - 中止在 Visual Studio 2012 中运行 MSTest 单元测试

java - Mockito 太多实际调用

java - Mockito Mock 运行 Autowired 类对象

django - 在 Django 的测试中连接模拟和客户端

javascript - 如何在 Angular 单元测试中模拟/监视导入的函数