Re[2]: Тест метода класса Java, вызывающего другие методы
От: djandy_spb  
Дата: 16.02.11 15:49
Оценка:
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?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.