当您尝试对其运行 JUnit 测试时,不会为独立应用程序加载来自“application.yml”的属性

Posted

技术标签:

【中文标题】当您尝试对其运行 JUnit 测试时,不会为独立应用程序加载来自“application.yml”的属性【英文标题】:properties from 'application.yml' not loading for standalone application when you try to run JUnit Test against it 【发布时间】:2021-05-15 22:51:16 【问题描述】:

当您将其作为 Spring Boot 应用程序运行并从 src/main/resources/application.yml 加载属性时,我的类应用程序运行良好,如下所示

class abc

        @Value("$spring.host")
        private String host;
        
    private ConnectionFactory getConnection() 
    ConnectionFactory factory = new ConnectionFactory();//constructs Connection instances
    factory.setHost(host);
    return factory;
       
     

下面是application.yml的详细信息

spring.host: xx.xx.xx.1

但是当您尝试针对上述class abc 运行junit 测试时,它不会从src/main/resources/application.yml 上传属性。甚至我也在test目录下创建了一个测试文件application.yml src/test/resources/application.yml 有以下详细信息

spring.host: xx.xx.xx.1

下面是我的 Junit 测试类详细信息

@RunWith(SpringRunner.class)
@TestPropertySource(properties =  "spring.config.location=classpath:application.yml" )     
@TestPropertySource(properties = "spring.test1= xx.xx.xx.2",
    "spring.test2= 1111"
    )
@ContextConfiguration(initializers =  ConfigFileApplicationContextInitializer.class )

public class Testclass 
   
InjectMocks
private abc ab;

@Value("$spring.test1") /// here it is getting uploaded from src/main/resources/application.yml 
  private String test1;

@Test
public void testExecute() throws Exception 
abc.getConnection();
   
 

我很难理解和调试为什么 JUnit 无法使用相同的配置来从 application.yml 加载属性,但是当简单地将 abc 类作为您的独立应用程序运行时它运行良好。

【问题讨论】:

【参考方案1】:

你在 abc 中的使用

@Value("$spring.host")

但是在 application.yaml 你有

spring.rabbitmq.host: xx.xx.xx.1

【讨论】:

我更正了,但更新后仍然对 main/resource/application.yml 的属性没有影响

以上是关于当您尝试对其运行 JUnit 测试时,不会为独立应用程序加载来自“application.yml”的属性的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Junit 5 使用 Testcontainer 对 Kafka 运行集成测试

从 JUnit 运行时 Spring 不会自动装配

Spring Boot JPA 元模型不能为空!尝试运行 JUnit / 集成测试时

JUnit 测试通过但 PIT 说套件不是绿色的

使 Spring JUnit Test 在测试数据库上运行

Spring Boot / JUnit,为多个配置文件运行所有单元测试