在上下文不应该加载的情况下测试Spring

时间:2015-09-01 16:29:34

标签: java spring junit spring-boot spring-test

我想在没有给出配置文件的情况下测试我的Spring Boot应用程序。在这种情况下,应用程序应该在创建bean MyConfig时抛出异常。

@SpringBootApplication
public class MyApplication {
    public static void main(String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }

    @Bean
    public MyConfig myConfig() throws IOException {
        if (no config file) throw new NoConfigFileException();
    }
}

我有一个测试,测试是否构建了Spring应用程序的上下文:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyApplication.class)
@TestPropertySource(locations="classpath:file_with_existing_config_file_path.properties")
public class MyApplicationTest {

    @Test
    public void contextLoads() {
    }

}

此测试失败 - 正如预期的那样(因为myConfig方法抛出NoConfigFileException)。不幸的是,我不能把灯变成绿色"使用注释@Test(expected = NoConfigFileException.class)

如果不是我所得到的唯一一种测试方法,我应该在哪里预期异常?

1 个答案:

答案 0 :(得分:1)

编写自动化测试时的黄金法则是 - >每个测试方法覆盖一个测试用例(除非您进行参数化测试)。在我看来,你正在考虑违反这条规则。

考虑单独的测试类(您没有指定属性文件),它只测试此方面或您的逻辑。这样您就可以使用@Test(expected = NoConfigFileException.class)

顺便说一下,我建议看一下Spring Boot功能@ConfigurationProperties。您可以对属性使用Java EE验证(例如@NotNull)。

这样,如果没有配置文件加载到Spring Context中,您可以强制应用程序查找文件并提前失败。