有一个SpringBoot应用程序,带有SomeService和测试类来测试此服务。
我可以运行我的测试,一切正常,但只要我在我的主应用程序类MyApplication
中使用CommandLineRunner
接口(“implements CommandLineRunnner
”),那么我所有的测试都开始失败。
问题是,当我试图在run
方法中获取argument参数时,比如args[0]
**,那么我的测试开始失败。
我得到了这个错误:
Caused by: java.lang.IllegalStateException: Failed to execute CommandLineRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:774)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:755)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:319)
任何想法如何修复它并运行我的测试没有得到这个错误?
我的代码看起来像这样:
@SpringBootApplication
public class MyApplication implements CommandLineRunner {
@Autowired
SomeService someService;
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
@Override
public void run(String... args) throws Exception {
String file = args[0];
someService.calculate(file);
}
}
@Component
public class SomeService {
// some methods here...
}
@SpringBootTest
public class SomeServiceTest {
@Autowired
private SomeService someService;
@Test
public void some_test() {
someService.someFunction();
//....
}
}
1条答案
按热度按时间roejwanj1#
这是因为
CommandLineRunner#run()
将在spring Boot 启动后执行。这里的输入参数args
通常从用于运行spring Boot 应用程序的命令行传递。当你执行
@SpringBootTest
时,默认情况下它的参数列表是空的,但是现在你的方法通过args[0]
访问它的0索引项,这将导致IndexOutOfBoundsException
发生,这反过来又导致SpringApplication#callRunner()
抛出IllegalStateException
。建议你把你的
CommandLineRunner#run()
设置为null安全,比如:或者通过以下方式配置参数列表: