测试 Spring 以了解甚至不应该加载上下文的情况
Posted
技术标签:
【中文标题】测试 Spring 以了解甚至不应该加载上下文的情况【英文标题】:Test Spring for case when context should not even load 【发布时间】:2015-11-26 23:40:36 【问题描述】:我想在没有给出配置文件的情况下测试我的 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)
。
顺便说一句,我建议查看 Spring Boot 功能 @ConfigurationProperties。您可以对属性使用 Java EE 验证(例如 @NotNull)。
这样,如果没有将配置文件加载到 Spring Context 中,您可以强制应用程序查找文件并提前失败。
【讨论】:
谢谢,我一定忘记了这条规则 :) 现在容易多了。以上是关于测试 Spring 以了解甚至不应该加载上下文的情况的主要内容,如果未能解决你的问题,请参考以下文章
可以在加载的 Spring 上下文中以编程方式替换 Spring Bean