Как передать аргументы командной строки в Junit Test - PullRequest
0 голосов
/ 07 июля 2019

У меня есть основной класс, который принимает аргументы командной строки, и я передаю этот параметр другому классу.Теперь я должен проверить myClass с параметрами.У меня есть JUnit для тестирования, но я хочу знать, как пройти это в тесте

public class JsonFileTest {
    public static void main(String[] fileNames) {
        myClass class = new myClass(fileNames);
    }
}

Я новичок в JUnit и изучаю его, так что если какое-либо руководство будет высоко оценено.Мне нужно передать имена файлов в метод класса.

Ответы [ 3 ]

1 голос
/ 08 июля 2019

Несколько полезных очков для начинающего:

  1. Вы не можете назвать свой объект "классом" в Java.

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

Теперь об аргументах командной строки. У вас есть ответ в вашем коде:

public static void main(String[] fileNames) {

String[] fileNames - массив аргументов командной строки.

Итак, чтобы предоставить некоторые аргументы вашему методу, инициализируйте его нужным параметром.

Что-то вроде:

@Test
public void testMainMethod(){
   JsonFileTest.main(new String[]{"file1", "file2"});
}

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

@Test
public void testConstructor(){
   myClass class = new myClass(new String[]{"file1", "file2"});
   /* Your assertions here */

}
1 голос
/ 07 июля 2019

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

0 голосов
/ 07 июля 2019

Вам не нужно передавать параметры командной строки для выполнения JUnit.Вместо этого ваши тестовые методы должны собирать / подготавливать все и вызывать ваш конструктор new myClass(...) с параметрами, которые ваша исходная программа будет использовать при использовании параметров командной строки.Код может выглядеть так:

@Test
public void checkForWhatever() {
    // prepare everything here like create a temp file
    File x = ...;
    String filename = x.getName(); // or maybe even x.getAbsolutePath();

    String[] arguments = new String[1];
    arguments[0] = filename;

    // now call your constructor
    myClass obj = new myClass(arguments);

    // do any checks here now
    Assertions.assertTrue(obj.getWhatever());
    // ...
}
...