Вопрос

Я прохожу курс agile-практик и у меня есть домашнее задание.Они научили меня тому, что перед изменением кода (рефакторингом или добавлением функциональности) я должен добавить несколько тестов, чтобы обрести уверенность и быть уверенным, что я не изменю поведение во время рефакторинга.Это понятно и имеет смысл, но что, если код невозможно протестировать без предварительного рефакторинга?

Простой пример:

public class Summation
{
    private int addend1;
    private int addend2;

    public Summation(int addend1, int addend2)
    {
        this.addend1 = addend1;
        this.addend2 = addend2;
    }

    public int doSum()
    {
        System.out.println(addend1 + addend2);
    }

    // Getters/setters
}

Я хотел бы запустить приемочный/интеграционный тест с использованием FIT и проверить, проверена ли следующая таблица:

 ----------------------------
| addend1 | addend2 | result |
 ----------------------------
| 1       | 1       | 2      |
 ----------------------------
| 1       | -1      | 0      |
 ----------------------------
| -1      | 1       | 0      |
 ----------------------------
| -1      | -1      | -2     |
 ----------------------------

Но поскольку функция doSum() выводит сумму в стандартный поток вывода, для него сложно написать тест (я предпочитаю избегать перехвата стандартного вывода).Было бы разумнее слегка реорганизовать код, чтобы иметь метод, возвращающий сумму.Но поскольку мне технически «не разрешено» изменять код перед написанием любого теста, это не рекомендуется.

Можете ли вы дать мне какие-нибудь подсказки?Как бы вы поступили?

Спасибо!

Это было полезно?

Решение

Звучит похоже на этот вопрос.

Независимо от того, разрешено ли вам изменять код или нет, вы вынуждены перехватывать стандартный поток вывода.В любом случае это часть поведения.

Другие советы

Вы можете написать файл test.cpp для вызова Summation.Summation(x,y) с различными значениями x и y в вашей таблице и проверить/записать результаты.Убедитесь, что результаты соответствуют вашим ожиданиям.Далее вы можете отредактировать класс суммирования и снова запустить тесты (из test.cpp), чтобы убедиться, что значения такие же, как и изначально.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top