首页 > 解决方案 > 如何将 application.yaml 中的值注入 Junit 5 测试用例

问题描述

我正在使用 Junit5 在 java 中编写单元测试用例。我在 application.yaml 中添加的值很少,但我无法在我的测试文件中检索它们,例如。ownerMasterList 值是 null 但它存在于 application.yaml

@ExtendWith(MockitoExtension.class)
public class OwnerServiceTest {
@Value("${owner.master-list}") 
private ownerMasterList;

@Test 
void findAllOwners(){
  ---test detail
 }

}

标签: spring-bootjunit5

解决方案


通过阅读您的代码,您似乎正在使用 JUnit5 ( @ExtendWith(MockitoExtension.class))。

用于触发 Spring 应用程序上下文启动的正确扩展名是 ( @ExtendWith(SpringExtension.class))。如果您使用的是 Spring Boot,则可以使用@SpringBootTest本身带有注释的注释@ExtendWith(SpringExtension.class)

不过要注意一点:在对代码进行单元测试时,不应连接应用程序上下文。您应该单独测试您的类并ownerMasterList通过构造函数注入所需的属性(此处)(请参阅@BeforeEachJUnit 5 注释):

class OwnerServiceTest {

    private OwnerService ownerService;

    @BeforeEach
    void setUp() {
        this.ownerService = new OwnerService(new ArrayList<>(...));
    }
}

推荐阅读