Разработка через тестирование: пустые методы - PullRequest
4 голосов
/ 04 августа 2010

Я изучал TDD (используя JUnit), и у меня есть сомнения относительно того, как проводить тестирование пустых методов, и в этом случае я не могу напрямую использовать что-то вроде assertTrue () для возвращаемого значения метода.Например, скажем, у меня есть простое консольное приложение, и часть его выводит на экран меню, скажем, используя этот метод:

public void printMenu()
{
   System.out.println("Menu:");
   System.out.println("1. Option ONE");
   System.out.println("2. Option TWO");
   System.out.println("3. Exit");
}

У меня вопрос, нужно ли мне на самом деле тестировать этот метод???И если да, то как мне это сделать?

Ответы [ 4 ]

3 голосов
/ 04 августа 2010

Сложно провести модульное тестирование метода, который основан на статических вызовах методов. Это не вопрос возврата чего-либо или void. То, что вы можете сделать, это абстрагировать печать в интерфейс, и ваш класс будет зависеть от этого интерфейса (например, с помощью инжектора конструктора):

private SomePrinterInterface _printer;

public void printMenu()
{
   _printer.println("Menu:");
   _printer.println("1. Option ONE");
   _printer.println("2. Option TWO");
   _printer.println("3. Exit");
}

В своем модульном тесте вы можете смоделировать интерфейс и проверить, были ли вызваны правильные методы для него. Таким образом, вы можете проверить printMenu самостоятельно.

2 голосов
/ 04 августа 2010

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

Но:

Если вы хотите протестировать создание меню, поскольку ваш код меню сложен и вам нужны способы, чтобы он работал, у вас есть пара вариантов.

  1. Выполните рефакторинг вашего метода, чтобы он принимал выходной поток в качестве параметра, а затем передавал выходной поток, содержимое которого вы можете проверить. Вы также можете перенаправить System.out для достижения этой цели.
  2. Измените ваш метод так, чтобы меню создавалось как набор объектов, а затем распечатывалось отдельно. Вы можете проверять и проверять эти объекты.
1 голос
/ 04 августа 2010

Вы не можете выполнить модульное тестирование этого метода.

Этот метод не выполняет никакой логики или обработки, которые необходимы для модульного тестирования.

Если вам необходимо выполнить модульное тестирование меню печати, вы можете рассмотретьвывод результата в текстовый файл.Затем прочитайте текстовый файл и сравните тексты меню.

1 голос
/ 04 августа 2010

захватить вывод консоли и сравнить с ожиданиями

...