#spring-boot #junit #junit5 #applicationcontext
#spring-boot #junit #junit5 #applicationcontext
Вопрос:
Я пытаюсь написать модульные тесты для конечной точки SOAP, написанной с использованием Spring boot. Изначально я писал тесты, используя @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
Не уверен, чего здесь не хватает.
Пожалуйста, помогите.
Ответ №1:
Обычно подобные ошибки при переходе на junit 5 возникают из-за использования аннотаций Junit из пакетов junit 4. Предоставленный вами тестовый класс содержит аннотацию Junit 4 @Before
.
Мой подход к переходу с Junit 4 на Junit 5 заключается в удалении всего импорта, связанного с junit 4, прежде чем делать что-либо еще, т. Е. Удалить все операторы импорта в org.junit.*
-packages .
Не сохраняйте ничего из этого:
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, в частности к разделу аннотаций
Комментарии:
1. Спасибо за решение.
2. Большое вам спасибо, я использовал
@RunWith(SpringJUnit4ClassRunner.class)
и не мог получить доступ к контексту приложения, но с@ExtendWith(SpringExtension.class)
помощью I can .