По словам Миско Хевери, у которого есть блог для тестирования. Разработчики должны избегать объектов «держатель», «контекст» и «кухонная раковина» (они берут все виды других объектов и представляют собой сумку соавторов). Передайте в качестве параметра нужный вам объект вместо держателя этого объекта.
В примере удара этот код пахнет? Должен ли я передавать только необходимые параметры или модель / бин с данными, которые мне нужны.
Например, сделаете ли вы что-нибудь подобное: Примечание. Я, вероятно, мог бы передать данные как аргументы конструктора. Это запах кода?
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();
}
Другой вопрос: при написании тестируемого кода вы склонны писать СЛИШКОМ много классов. Неправильно ли иметь слишком много классов или один класс со слишком многими методами. Занятия полезны и имеют единственную цель. Но я мог видеть, где они могут быть реорганизованы в один больший класс ... но у этого класса было бы несколько целей.