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



我正在尝试为使用Spring引导编写的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()中得到以下错误,因为applicationContextnull

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

不确定这里缺了什么。

请帮忙。

在迁移到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用户指南,特别是注释部分

最新更新