说我有这个班:
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);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。