带有配置文件的Spring集成测试
在我们的Spring Web应用程序中,我们使用Spring
bean配置文件来区分三种情况:开发,集成和生产。我们使用它们来连接到不同的数据库或设置其他常量。
使用Spring Bean配置文件对于更改Web应用程序环境非常有效。
我们的问题是我们的 集成测试代码
需要针对环境进行更改。在这些情况下,集成测试将加载Web应用程序的应用程序上下文。这样,我们不必重新定义数据库连接,常量等(应用DRY原理)。
我们按照以下步骤设置集成测试。
@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = ["classpath:applicationContext.xml"])
public class MyTestIT
{
@Autowired
@Qualifier("myRemoteURL") // a value from the web-app's applicationContext.xml
private String remoteURL;
...
}
我可以使用来使它在本地运行@ActiveProfiles
,但这是硬编码的,并导致我们的测试在构建服务器上失败。
@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = ["classpath:applicationContext.xml"])
@ActiveProfiles("development")
public class MyTestIT
{ ... }
我还尝试过使用@WebAppConfiguration
它,希望它能以某种方式spring.profiles.active
从Maven
导入属性,但这是行不通的。
另一个注意事项,我们还需要配置代码,以便开发人员可以运行Web应用程序,然后使用IntelliJ的测试运行器(或另一个IDE)运行测试。这对于调试集成测试更加容易。
回答:
正如其他人已经指出的那样,您可以选择使用Maven来设置spring.profiles.active
系统属性,确保 不要
使用@ActiveProfiles
,但这对于在IDE中运行的测试来说并不方便。
对于通过编程方式设置活动配置文件的方法,您有几个选择。
- Spring 3.1:编写一个
ContextLoader
通过在上下文的中设置活动配置文件来准备上下文的自定义Environment
。 - Spring 3.2:自定义
ContextLoader
仍然是一个选项,但更好的选择是实施ApplicationContextInitializer
并通过的initializers
属性对其进行配置@ContextConfiguration
。您的自定义初始化程序可以Environment
通过编程设置活动配置文件来配置。 - Spring 4.0:上述选项仍然存在;但是,从Spring Framework 4.0开始,有一个专门
ActiveProfilesResolver
用于此目的的新专用API:以编程方式确定要在测试中使用的活动配置文件集。一个ActiveProfilesResolver
可以通过注册resolver
的属性@ActiveProfiles
。
问候,
Sam(Spring TestContext Framework的作者)
以上是 带有配置文件的Spring集成测试 的全部内容, 来源链接: utcz.com/qa/402424.html