使用Springboot + JUnit测试启动器

时间:2019-06-20 15:16:45

标签: java spring spring-boot junit

我有一个用SpringBoot创建的自定义库(入门版)。因此,它没有main方法或@SpringBootApplication带注释的类。

我想用JUnit测试此入门功能。我已经在src/testTestApplication)中创建了一个要启动的类。

@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, 但这并没有真正的帮助。

任何想法表示赞赏。

1 个答案:

答案 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,然后从启动程序加载入口类,然后在该上下文中声明已加载的内容。