2015-09-01 71 views
1

我想测试我的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

当您编写自动化测试时,黄金法则是 - >每个测试方法都包含一个测试用例(除非您正在进行参数化测试)。在我看来,你正在考虑打破这一规则。

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

顺便说一句,我会建议看看春季启动功能@ConfigurationProperties。您可以将Java EE验证(例如@NotNull)用于您的属性。

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

+0

谢谢,我一定已经忘记了这条规则:)现在它更容易了。 –