我有一个用SpringBoot创建的自定义库(入门版)。因此,它没有main方法或@SpringBootApplication
带注释的类。
我想用JUnit测试此入门功能。我已经在src/test
(TestApplication
)中创建了一个要启动的类。
@SpringBootTest
@ContextConfiguration(classes = TestApplication.class)
@RunWith(SpringRunner.class)
public class SettingsTest {
@Autowired
private MyService myService;
@Test
public void testSettingsLoad(){
//do smth
}
}
@SpringBootApplication
public class TestApplication {
public static void main(String[] args) {
SpringApplication.run(TestApplication.class, args);
}
}
但是,未调用TestApplication
main
并且未正确引发应用程序上下文。
我试过没有@RunWith
注释(根本没有Spring上下文),并且直接将类添加到@SpringBootTest
注释(也忽略了)。
我已经读过this post, 但这并没有真正的帮助。
任何想法表示赞赏。
答案 0 :(得分:0)
启动器是自动配置。当我编写启动程序时,我不会测试使用启动程序的spring-boot应用程序,而是测试启动程序本身,这在49.4 Testing your Auto-configuration
部分中有很好的说明。private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withConfiguration(AutoConfigurations.of(UserServiceAutoConfiguration.class));
@Test
public void defaultServiceBacksOff() {
this.contextRunner.withUserConfiguration(UserConfiguration.class)
.run((context) -> {
assertThat(context).hasSingleBean(UserService.class);
assertThat(context.getBean(UserService.class))
.isSameAs(context.getBean(UserConfiguration.class).myUserService());
});
}
因此,您要做的是创建一个ApplicationRunnerContext,然后从启动程序加载入口类,然后在该上下文中声明已加载的内容。