Как я могу применить модульное тестирование к моему простому алгоритму?

У меня есть проект maven, который рисует елку. Мне нужно реализовать на нем модульные тесты, но я понятия не имею, как это сделать:/

Я уже настроил JUnit в своем проекте Maven.

for (int i = 0; i < 4; i++) {
   for (int j = 0; j < 10 - i; j++)
    System.out.print(" ");
   for (int k = 0; k < (2 * i + 1); k++)
    System.out.print("*");
   System.out.println();
  }

Это не сайт "закодируй это для меня". Вам необходимо предоставить минимальный воспроизводимый пример для конкретной проблемы на будущее.

TheChubbyPanda 27.05.2019 15:55

Я знаю, но я все еще студент. Перерыл кучу файлов про TDD, но так и не знаю, как применить тестирование на этих простых алгоритмах.

Mr_Deadlock 27.05.2019 15:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
325
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Поскольку код печатается в System.out, вам нужно будет перенаправить System.out в файл или строку (см. это), а затем сравнить сгенерированный вывод с желаемым выводом, чтобы убедиться, что код работает правильно.

Прежде всего спасибо за идею. Теперь я попытаюсь получить вывод этого дерева и попытаться проверить в своем тестовом методе, чтобы увидеть, соответствует ли оно тому, что я хочу, или нет.

Mr_Deadlock 27.05.2019 16:04
Ответ принят как подходящий

Предполагая, что ваш класс, который рисует рождественскую елку, выглядит примерно так:

class ChristmasTreeDrafter {

    void draw() {
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 10 - i; j++)
                System.out.print(" ");
            for (int k = 0; k < (2 * i + 1); k++)
                System.out.print("*");
            System.out.println();
        }
    }
}

Вы можете проверить это таким образом:

public class ChristmasTreeDrafterTest {

    private final ByteArrayOutputStream out = new ByteArrayOutputStream();

    @Before
    public void setup() {
        System.setOut(new PrintStream(out));
    }

    @Test
    public void shouldDrawChristmasTree() {
        // given
        ChristmasTreeDrafter christmasTreeDrafter = new ChristmasTreeDrafter();

        // when
        christmasTreeDrafter.draw();

        // then
        Assert.assertEquals("          *\r\n" +
                "         ***\r\n" +
                "        *****\r\n" +
                "       *******\r\n", out.toString());
    }
}

В методе setup стандартный поток вывода перенаправляется на объект out и благодаря этому вы можете проверить его содержимое в блоке then. К сожалению, в Java нет многострочных строк, поэтому этот код выглядит некрасиво. Чтобы улучшить читаемость, вы можете извлечь этот контент в файл под test/resources (при условии структуры проекта maven по умолчанию).

Это действительно то, что я ищу. Спасибо . Я попытаюсь реализовать это в своем коде и посмотрю, как это происходит.

Mr_Deadlock 27.05.2019 16:06

Замечательно! Если это соответствует вашим ожиданиям, рассмотрите возможность принятия моего ответа.

k13i 27.05.2019 16:10

Это сработало ! Спасибо большое. Это мой первый раз, когда я пытаюсь сделать тесты, и этот алгоритм немного отличается. Мне не удалось понять, как я могу его протестировать, и я все еще изучаю Java, я не мог подумать, что могу использовать буфер.

Mr_Deadlock 27.05.2019 16:21

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