如何解决无法在使用@ExtendWithSpringExtension.class运行的Spring Boot Unit测试中注入应用程序上下文
我正在尝试为使用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
不确定这里缺少什么。
请帮助。
解决方法
通常,在迁移到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;
删除旧的导入可确保没有“遗忘”的导入仍在徘徊,从而引起看似无关的错误消息(例如您在此处遇到的错误消息)的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。