Я написал класс, который принимает входные данные из консоли и аргументы в основном методе. Основной метод вызывает разные методы для разных консольных входов и вызывает разные функции для разных аргументов. Поэтому я хочу протестировать этот основной метод с помощью Junit, подражая этим входам из файла. как мне это сделать? Есть ли какое-либо специальное условие в junit для проверки основного метода класса?
Тестирование основного метода junit
Ответ 1
Чтобы обеспечить ввод из файла, сделайте FileInputStream
и установите его как поток System.in
. Вероятно, вы захотите установить исходный текст после завершения основного метода, чтобы убедиться, что все его использование позже работает (другие тесты, сам JUnit...)
Вот пример:
@Test
public void testMain() throws IOException {
System.out.println("main");
String[] args = null;
final InputStream original = System.in;
final FileInputStream fips = new FileInputStream(new File("[path_to_file]"));
System.setIn(fips);
Main.main(args);
System.setIn(original);
}
В вашем фактическом коде вы хотите обрабатывать любые IOExceptions и использовать что-то лучше, чем полный путь к файлу (получить его через загрузчик классов), но это дает вам общую идею.
Ответ 2
IMO - лучший способ протестировать основной метод - это сделать основной метод абсолютно ничего, кроме как настроить мир и оттолкнуть его. Таким образом, один простой тест интеграции дает ответ "настроен мир".
Тогда все остальные вопросы станут намного легче ответить.
Основной метод вызывает разные методы для разных входов в консоль и вызывает разные функции для разных аргументов.
Он не должен, он должен называть someService.somemethod(args)
. Эта служба тестируется, как и любая другая.
Итак, я хочу протестировать этот основной метод с помощью Junit, подражая этим входам из файла. как мне это сделать?
Любая форма подделок, введенная или использующая правило TemporaryFolder JUnit.
Ответ 3
Вы можете вызвать основной метод из теста junit следующим образом:
YourClass.main(new String[] {"arg1", "arg2", "arg3"});
Но поскольку основной метод недействителен и ничего не возвращает, вы должны проверить объект, который изменился после основного вызова;
Вот ссылка Как проверить метод, который ничего не возвращает?