#java #junit #main
#java #junit #программа-точка входа
Вопрос:
Я только начал изучать JUnit. У меня есть следующий код:
public class MyClass {
private void verify(args) {...}
private void process(clientoptions) {...}
public static void main(String[] args) {
verify(args);
//get client and do something
.....
// some more code here....
........
// and then
process(clientoptions);
}
}
Как вы пишете тест в Junit, а затем отправляете разные аргументы командной строки.
Спасибо
Ответ №1:
Просто!
public class MyClassTest {
@Test
public void shouldVerifyParameters() {
MyClass.main(new String[]{"param1", "param2"});
}
}
Однако для простоты тестирования рассмотрите возможность рефакторинга MyClass
в MyClassMain
и MyClass
где первый только анализирует и проверяет аргументы командной строки и вызывает последний класс с. clientoptions
Таким образом, вы не нарушаете принцип единой ответственности и можете использовать бизнес-логику вне main
, например, в сервлете или на мобильном устройстве. Кроме того … тестирование проще.
Комментарии:
1. Если процесс (clientoptions) возвращает логическое значение, указывающее состояние ошибки, то как я могу использовать метод assertTrue для проверки результата. Основной метод возвращает void . Спасибо.
2. Прежде всего, если вы перейдете к рефакторингу, который я предложил, вы можете протестировать
process()
напрямую. Во-вторых, возвратfalse
для указания ошибки — это плохой дизайн, вместо этого используйте исключения.