【发布时间】:2020-08-23 23:23:56
【问题描述】:
我知道用 public 改变私有方法的符号忽略封装原则。此外,私有方法是一个实现细节。但是我想知道如果该方法不影响或破坏系统的其他部分,我可以公开该方法的签名吗?
例如;
我有一个包含 switch-case 块的方法;
private Object foo(Object object, MyTypeEnum type) {
....
switch(type) {
case type.x:
return "a";
case type.y:
return "b";
case type.z:
return "c";
.
.
.
}
..
}
另外;
- 移动 utils 类中的方法以使其符号公开是不好的做法,因为该方法不是通用且可重用的
- 测试调用私有方法(foo) 的公共方法是一种解决方案。但是,我的代码库有很多遗留和未经测试的代码,所以我必须更改其他类和方法。此外,我没有足够的时间重构代码库的其他部分。
你对这个案子有什么建议?
【问题讨论】:
-
当然可以,但需要注意的是,一旦公开,它就是公开的。它已经是一个可疑的方法,因为它返回
Object。问题是 1) 应该 您,2) 是否有 其他 测试(单元或集成)已经测试过这种行为,以及 3) 测试这种行为的投资回报率是否值得.这些问题没有通用的答案;这在很大程度上取决于上下文。 (不相关,但return之后的break是多余且毫无意义的。)artima.com/suiterunner/private.html
标签: java unit-testing testing junit