无法在使用 @ExtendWith(SpringExtension.class) 运行的 Spring Boot 单元测试中注入应用程序上下文

问题描述 投票:0回答:1

我正在尝试为使用 Spring boot 编写的 SOAP 端点编写单元测试。最初我使用

@RunWith(SpringJUnit4ClassRunner.class)
编写测试,所有测试均成功执行。但是,当我尝试使用
@ExtendWith(SpringExtension.class)
升级单元测试时,测试无法运行,因为它无法自动装配
ApplicationContext
对象。以下是旧代码和新代码的一部分。

旧代码:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestConfiguration.class})
public class ServiceEndPointTest {
    @Autowired
    private ApplicationContext applicationContext;
    private MockWebServiceClient mockClient;

    @Before
    public void setUp() {
        mockClient = MockWebServiceClient.createClient(applicationContext);
    }

新代码:


@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {TestConfiguration.class})
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@ActiveProfiles(profiles = "unittest")
public class ServiceEndPointTest {
   
    @Autowired
    private ApplicationContext applicationContext;
    private MockWebServiceClient mockClient;

    
    @Before
    public void setUp() {
        mockClient = MockWebServiceClient.createClient(applicationContext);
    }

我在

setUp()
中遇到以下错误,因为
applicationContext
null

java.lang.IllegalArgumentException: 'applicationContext' must not be null

    at org.springframework.util.Assert.notNull(Assert.java:198)
    at org.springframework.ws.test.server.MockWebServiceClient.createClient(MockWebServiceClient.java:151)
    at com.test.ServiceEndPointTest.setUp(ServiceEndPointTest.java:80

不确定这里缺少什么。

请帮忙。

java spring-boot junit junit5 applicationcontext
1个回答
2
投票

通常在迁移到 junit 5 的过程中出现这样的错误是由于使用 junit 4 包中的 Junit 注释引起的。您提供的测试类包含 Junit 4 注释

@Before

我从 Junit 4 迁移到 Junit 5 的方法是在执行其他操作之前删除与 junit 4 相关的所有导入,即:删除

org.junit.*
包中的所有导入语句。

不要保留以下任何一个:

import org.junit.Before;
import org.junit.runner.RunWith;
import org.junit.Test;

相反,导入这些(等等):

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;

删除旧的导入可确保不存在“被遗忘”的导入,这些导入仍然会导致出现看似不相关的错误消息的问题,就像您在此处遇到的那样。

另请参阅 Junit 5 用户指南,特别是 注释部分

© www.soinside.com 2019 - 2024. All rights reserved.