Adr*_*ian 3 java unit-testing scala
说我有这个班:
class MyClass {
private String s;
// more attributes here
public MyClass(String s, /*more constructor params*/) {...}
public String myMethod(String s) {
//complex logic here
}
}
Run Code Online (Sandbox Code Playgroud)
要进行单元测试,myMethod()我需要创建整个对象(需要构造许多参数等),而方法只使用s.
Altenatelly我可以添加一个静态方法:
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
}
}
Run Code Online (Sandbox Code Playgroud)
现在我可以轻松测试"复杂逻辑"而无需创建对象.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |