JUnit: запустить один и тот же тест для нескольких целевых классов

Я пытаюсь автоматизировать способ одновременной оценки файлов нескольких учеников в моем введении в класс Java.

Как я могу запустить один и тот же тест для всех файлов в папке, если выполняются следующие условия:

  • Все файлы находятся в одной папке (без подпапок)
  • Все файлы имеют расширение .java
  • Все имена файлов являются важными идентификаторами
  • Код в каждом файле соответствует одинаковым требованиям
    SayHelloWorld
    |-bsmithSayHelloWorld.java
    |-athomasSayHelloWorld.java
    |-cjenkinsSayHelloWorld.java

Мне комфортно с JUnit, но в прошлом я использовал его только в одном файле, неуклюже через IntelliJ.

Вот простой пример файла, который я буду тестировать:

public class Main {

    public static void main(String[] args) {
        System.out.println(sayHello());
    }
    public static String sayHello(){
        return "hello Java";
    }
}

Мне бы очень хотелось иметь возможность автоматизировать модульное тестирование всех файлов .java, которые существуют в данной папке, и выводить результаты во что-то, с чем я могу работать (консоль, файл, что угодно).

Возможный вывод может выглядеть так:

bsmithSayHelloWorld helloWorldTest: pass
athomasSayHelloWorld helloWorldTest: fail
cjenkinsSayHelloWorld  helloWorldTest: pass

person mpcsf    schedule 29.05.2019    source источник
comment
Насколько я понимаю, каждый класс, который вы хотите протестировать, имеет один и тот же метод, скажем, sayHello(), и вы хотите выполнить один и тот же тест для каждого класса, скажем: testHelloWorld(), это правильно?   -  person sirandy    schedule 30.05.2019
comment
Это для сравнения работ студентов?   -  person msg45f    schedule 30.05.2019
comment
Да, именно @sirandy. Я предоставлю студентам базовый файл с чем-то неправильным, в данном случае с пустым методом sayHello(), и они должны будут заполнить его правильным оператором возврата.   -  person mpcsf    schedule 30.05.2019
comment
Я предлагаю вам реализовать Paremeterized тесты, вот подход для этого: stackoverflow.com/a/6724555/1670134 он работает с интерфейсами но вы можете изменить, чтобы принять конкретные классы.   -  person sirandy    schedule 30.05.2019
comment
@ msg45f Я хочу использовать его, чтобы выполнить начальную проверку задания, чтобы увидеть, кто выполнил его точно правильно, и я могу дать 100%, а затем я покопаюсь в тех, кто не прошел модульные тесты, чтобы вручную оценивать дальше.   -  person mpcsf    schedule 30.05.2019
comment
@mpcsf Не ответ, поскольку это совсем другое решение (и другой уровень сложности), но в прошлом я использовал классы Github и Jenkins (сервер автоматизации) с конвейером построения организации. Автоматически создает проекты, когда мои ученики загружают свой код, запускают тесты и создают для меня отчет.   -  person msg45f    schedule 30.05.2019
comment
@ msg45f у вас где-нибудь задокументирован ваш процесс?   -  person mpcsf    schedule 30.05.2019
comment
@mpcsf К сожалению, не совсем, хотя я хотел бы создать для этого некоторую документацию, когда у меня будет время.   -  person msg45f    schedule 30.05.2019


Ответы (1)


Начиная с Java11 вы можете запускать отдельные классы Java без компиляции.

Поэтому, если вы можете свободно использовать Java 11, вы можете перебрать файлы Java в папке с заданным вводом, а затем check вывод программы против ожиданий.

То же самое можно сделать с помощью многих других скриптовых решений, таких как ant, make, gradle, python, ruby,...

person tkruse    schedule 30.05.2019