在我们的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)运行测试.这对于调试集成测试来说要容易得多.