根据拥有可测试性博客的 Misko Hevery 的说法。开发人员应避免使用“持有人”、“上下文”和“厨房水槽”对象(这些对象包含各种其他对象并且是协作者的抓包)。传入您需要的特定对象作为参数,而不是该对象的持有者。
在示例中,这段代码有异味吗?我应该只传递需要的参数还是传递我需要的数据的模型/bean。
例如,你会做这样的事情吗:注意。我可能可以将数据作为构造函数参数传递。这是代码味道吗?
public Parser {
private final SourceCodeBean source;
public Parser(final SourceCodeBean s) {
this.source = s;
}
public void parse() {
// Only access the source field
this.source.getFilename();
...
... assume that the classes uses fields from this.source
...
}
}
public SourceCodeBean {
private String filename;
private String developer;
private String lines;
private String format;
...
...
<ONLY SETTERS AND GETTERS>
...
}
...
Or
public Parser {
public Parser(String filename, String developer, String lines ...) {
...
}
}
And building a test case
public void test() {
SourceCodeBean bean = new SourceCodeBean():
bean.setFilename();
new Parser().parse();
}
另一个问题:在编写可测试代码时,您是否倾向于编写太多类。有太多类或一个类有太多方法是错误的。这些类很有用并且只有一个目的。但是,我可以看到它们可以在哪里重构为一个更大的类……但是那个类有多种用途。