Я создаю приложение весенней загрузки. Я хочу, чтобы запустить его, как это:Как передать аргументы программы в @SpringBootTest?
java -jar myjar.jar inputFile outputFile
Как написать @SpringBootTest
для этого? Я полагаю, что использование @SpringBootTest
приведет к сбою Spring во время запуска, потому что некоторые из моего кода скажут: «вам нужно предоставить inputFile и outputFile». Есть ли способ передать аргументы программы при использовании @SpringBootTest
?
I'm inferring from this answer что мне, возможно, придется использовать SpringApplicationBuilder для этого.
I мысль У меня был ответ, но я был неправ. Это неверная информация еще может быть полезным для некоторых:
(Эта информация неверна, я думаю, что некоторые аргументы не могут быть упомянуты в коде как свойства, но не все, что я до сих пор не знаю.. как получить аргументы приложения в @SpringBootTest
) Я был смущен, потому что я не понял терминологию. У аннотации есть параметр для «свойств». Я думал, что это было бы указать его в файле свойств, but the documentation says:
Свойства в виде ключа = значение, которое должно быть добавлено к Спринг среды перед испытания.
Другой фрагмент терминологической головоломки - это то, что я назвал «программными аргументами», как «весовые» документы, называются «свойствами».
Это некоторая дополнительная соответствующая документация: https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-application-arguments
Это обходной путь (не ответ). Вы можете сделать что-то вроде этого:
private SpringApplicationBuilder subject;
@Before
public void setUp() throws Exception {
subject = new SpringApplicationBuilder(Application.class);
}
@Test
public void requiresInputAndOutput() throws Exception {
thrown.expect(IllegalStateException.class);
subject.run();
}
@Test
public void happyPathHasNoErrors() throws Exception {
subject.run(EXISTING_INPUT_FILE, "does_not_exist");
}
Мне это не очень нравится. Это мешает мне использовать @Autowired
в другом месте моего теста.
Возможно, я не понимаю ваш ответ, но я не знаю, как действовать на нем. Похоже, вы говорите: «Не проверяйте этот способ. Вот как вы должны тестировать * другие * компоненты вашего приложения, хотя». В контексте моего вопроса, я чувствую, что мое обходное решение более полезно. –
Возможно, но кодирование с помощью Spring проще, когда вы следуете соглашениям. Нет необходимости создавать и запускать приложение для теста в том, как вы описываете. SpringRunner создаст контекст приложения и позволит вам авторизовать ваши службы. Аналогично @WebAppConfiguration используется для установления тестового контекста веб-сервера. –
Я хочу проверить, что это ошибки при запуске, если вы не передаете эти аргументы командной строки. –