java - 为了单元测试添加 'Getters' 和 'Setters'?

标签 java unit-testing testing junit mockito

我目前正在处理一些非常不稳定的代码。代码本身不是遗留的,但它使用的框架是遗留的并且非常糟糕。

我想开始为一个类编写一些 junit 测试(为了改变!),但为了有效地做到这一点,我需要添加一些 getter 和 setter。

我需要 setter 以便我可以检查类中私有(private)变量的状态(这里进行的一种状态机设计模式)并且我需要 getter 来模拟某些方法中的私有(private)变量是什么。

你们认为为了能够编写单元测试而将 getter 和 setter 添加到类中是坏的、好的还是可以接受的?

最佳答案

我会避免它。一般来说,您应该尽可能地构建事物以避免需要测试私有(private)变量并坚持应用程序的其余部分将暴露的交互。这通常是公共(public)方法/属性和使用伪造/替身的 protected 方法。

单元测试的目的是验证被测对象是如何交互的,不一定是实现细节。基本上,输入 x,我应该得到输出/效果 y。如果您执着于测试 x 是如何产生 y 的,那么您将冒着让您的类变得不灵活而无法更改的风险。你的类的每一次重构都可能破坏你的测试,即使输出和最终结果是一样的。

关于java - 为了单元测试添加 'Getters' 和 'Setters'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22722930/

相关文章:

java - 什么会导致 javax.xml.transform.Transformer.transform() 返回空字符串

java - Java 对象如何在 SOAP Web 服务中传递

java - 单击 RecyclerView 项目时更新 ListView

php - 我如何断言结果是 PHPUnit 中的整数?

java - 如何用 Mono 的数据丰富 Reactor 的 Context?

使用 jasmine/karma 和 http post mocking 进行 Angular 4 单元测试 - 如何修复

c# - 单元测试 Web 服务响应

unit-testing - 在 PHPUnit 中,为什么特定断言比通用断言更好?

python - 分组所有测试 Python

android - 从 eclipse 到电话我得到 INSTALL_FAILED_INSUFFICIENT_STORAGE