带型材的弹簧集成测试
在我们的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
{ ... }
我还尝试使用希望它可能以某种方式从Maven导入属性,但这不起作用。@WebAppConfiguration
spring.profiles.active
另一个注意事项是,我们还需要配置代码,以便开发人员可以运行Web应用程序,然后使用IntelliJ的测试运行程序(或其他IDE)运行测试。这对于调试集成测试要容易得多。