相关疑难解决方法(0)

使用profile进行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;
   ...
 }
Run Code Online (Sandbox Code Playgroud)

我可以使用它在本地运行@ActiveProfiles,但这是硬编码的,导致我们的测试在构建服务器上失败.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = ["classpath:applicationContext.xml"])
@ActiveProfiles("development")
public class MyTestIT
{ ... }
Run Code Online (Sandbox Code Playgroud)

我也试过使用@WebAppConfiguration希望它可能以某种方式spring.profiles.active从Maven 导入属性,但这不起作用.

另外需要注意的是,我们还需要配置代码,以便开发人员可以运行Web应用程序,然后使用IntelliJ的测试运行器(或其他IDE)运行测试.这对于调试集成测试来说要容易得多.

java spring spring-mvc spring-test

20
推荐指数
3
解决办法
3万
查看次数

@ActiveProfiles值未分配给config

如果我将它们设置为VM args,我的Active配置文件正常工作.

我有一个我想要使用的测试@ActiveProfiles("local").

这是我正在使用的类注释:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/jpaContext.xml")
@ActiveProfiles("local")
public class MyServiceTest {
Run Code Online (Sandbox Code Playgroud)

当我尝试运行时,我在跟踪中得到以下内容:

Caused by: java.io.FileNotFoundException: class path resource [properties/database-configuration-${spring.profiles.active}.properties] cannot be opened because it does not exist
Run Code Online (Sandbox Code Playgroud)

关于为什么没有使用这个值的任何想法?

spring jpa

3
推荐指数
1
解决办法
2286
查看次数

标签 统计

spring ×2

java ×1

jpa ×1

spring-mvc ×1

spring-test ×1