Отключить часть Java-программы во время тестирования JUnit - PullRequest
0 голосов
/ 21 ноября 2018

Я тестирую свою программу на Java с помощью JUnit.Программа включает в себя некоторый интерфейс JavaFX GUI и другой код регистрации.Однако во время тестирования я не хочу, чтобы они были проверены.Есть ли способ переключить код между тестированием и разработкой?

Описание может быть абстрактным, я буду использовать пример:

public class Helloworld {

    /**
     * @param args the command line arguments
     */
    public static int greetingCnt = 0;

    public static void main(String[] args) {
        Helloworld helloword = new Helloworld();
        helloword.greetWorld();
        helloword.greetWorld();
        helloword.greetWorld();
        System.out.println("Greating count: " + greetingCnt);
    }

    public void greetWorld() {
        System.out.println("Hello World!");
        ++greetingCnt;
        //some other computation...
    }

}

В этом примере, если я хочу толькопроверьте правильность числа приветствия, но не хотите, чтобы что-либо печаталось или какие-либо дополнительные вычисления выполнялись.Но во время фактического выполнения программы нет влияния на функцию программы.Могу ли я узнать, есть ли способ сделать это?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

Для вашего конкретного случая : вы можете использовать PowerMock, чтобы высмеивать System.out, но, честно говоря, я игнорирую все побочные эффекты, которые он может иметь.


В более общем смысле : то, что вы ищете, называется фиктивный объект и, в основном, позволяет экземпляру Object ничего не делать, как минимум, чтобы пройти через него.Ваш код.

В вашем случае, издевательство System.out позволит вам выполнять вызовы на System.out.println(), фактически не вызывая их.Таким образом, в результате ваш код будет выполняться так, как если бы он был:

public class Helloworld {

/**
 * @param args the command line arguments
 */
public static int greetingCnt = 0;

public static void main(String[] args) {
    Helloworld helloword = new Helloworld();
    helloword.greetWorld();
    helloword.greetWorld();
    helloword.greetWorld();
    // System.out.println("Greating count: " + greetingCnt);
}

public void greetWorld() {
    // System.out.println("Hello World!");
    ++greetingCnt;
    //some other computation...
}

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

0 голосов
/ 22 ноября 2018

Сначала необходимо настроить настраиваемую программу Java.

Один из способов сделать это - использовать файлы свойств Java .Затем вы можете использовать определенные свойства, чтобы отключить части вашей программы.

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

Файл свойств обычно является ресурсом вПуть к классу Java.Затем вы можете запустить тесты с помощью classpath, содержащего файлы свойств, описывающие конфигурацию теста.

0 голосов
/ 21 ноября 2018

Это невозможно без дополнительных усилий с вашей стороны.

Компьютер просто не может определить, какие вычисления влияют на что.

Вы можете отключить определенные функции, такие как печать на консоли, заменив значение по умолчанию PrintWriter, но нет общего решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...