说我有这个班:
class MyClass {
private String s;
// more attributes here
public MyClass(String s, /*more constructor params*/) {...}
public String myMethod(String s) {
//complex logic here
}
}
要对单元测试myMethod()我需要创建整个对象(需要构造许多参数等),而方法只使用s.
class MyClass {
private String s;
// more attributes here
public MyClass(String s, /*more constructor params*/) {...}
public String myMethod(String s) {
return myStaticmethod(s);
}
public static myStaticmethod(String s) {
//complex logic here
}
}
现在我可以轻松测试“复杂逻辑”而无需创建对象.
someStaticmethod(String s)应该对类没有副作用.
所以我添加了一个额外的方法只是为了便于测试.
这是一个好习惯吗?
解决方法:
那么,你已经将一个复杂的方法作为一个对象的成员,即使它与该实例没什么关系?
是的,我同意你应该使用不同的设计.它可以是该类中的静态方法,也可以是其自己的类中的因子.或者它可能是实现“策略”模式的对象的方法.正确的决定取决于变革的可能性.
也许是这样的:
class ComplexLogician {
String myMethod(String a, String b) {
/* Complex logic here. */
}
}
class MyClass {
private String s;
private final ComplexLogician logic;
/* More attributes here... */
MyClass(String s, ComplexLogician logic, /* More parameters... */) {...}
String myMethod(String b) {
return logic.myMethod(s, b);
}
}