I>Покажи пример лучше нормальный. Все зависит от того кода, что в этом основном методе. Нужно определиться с конечным дизайном.
Реальный код выложить не могу, но например сначала класс вот такой:
public class Statistics {
public String do(Stream stream) {
reader = new StreamReader();
formatter = new ResultFormatter();
Data data1 = reader.readData(stream);
Data data2 = reader.readData(stream);
Data data3 = reader.readData(stream);
if (data1.valid()) {
return formatter.format(VALID, data1);
} else if (data2.valid()) {
return formatter.format(INVALID, data1) + formatter.format(VALID, data2);
} else if (data3.valid()) {
return formatter.format(INVALID, data1) + formatter.format(INVALID, data2) + formatter.format(VALID, data3);
}
}
}
не хочется его тестить типа генерируя разные стримы а потом сравнивая результат с заготовленными результатами.
В этом примере отдельно можно оттестить StreamReader, ResultFormatter, можно логику обработки этих data1-data3 вынести в отдельный метод:
public class Statistics {
public String do(Stream stream) {
return doInternal(stream, new StreamReader(), new ResultFormatter(), new ResultStringBuilder());
}
public String doInternal(Stream stream, StreamReader reader, ResultFormatter formatter, ResultStringBuilder resultBuilder) {
Data data1 = reader.readData(stream);
Data data2 = reader.readData(stream);
Data data3 = reader.readData(stream);
return resultBuilder.getResult(data1, data2, data3);
}
public static class ResultStringBuilder {
public String getResult(Data data1, Data data2, Data data3) {
if (data1.valid()) {
return formatter.format(VALID, data1);
} else if (data2.valid()) {
return formatter.format(INVALID, data1) + formatter.format(VALID, data2);
} else if (data3.valid()) {
return formatter.format(INVALID, data1) + formatter.format(INVALID, data2) + formatter.format(VALID, data3);
}
}
}
}
Теперь все замечательно тестируется кроме метода do — как убедиться что он правильно вызвал doInternal?