Как использовать @Autowire при использовании @ParameterizedTest в Junit5 - PullRequest
0 голосов
/ 05 июля 2019

В настоящее время я использую SpringBoot1.5 и Junit5.Как использовать @autowire для внедрения зависимостей, когда я использую аннотацию @ParameterizedTest для параметрического тестирования, потому что мне нужно взаимодействовать с базой данных.

Я пытаюсь использовать

TestContextManager testContextManager = new TestContextManager(getClass());
testContextManager.prepareTestInstance(this);

, но это будетсделать @transaction недоступным.

это мой код

@ExtendWith(MockitoExtension.class)
@RunWith(SpringRunner.class)
public abstract class AbstractUnitTest {
}

public class PatientFacadeTestParameterized extends AbstractUnitTest {
...
    @Autowired
    PatientFacade patientFacade;(is null)
...

    @Transactional
    @ParameterizedTest(name = "{index}: {0}")
    @YamlFileSource(resources = {"logistics/patient_facade.yaml"})
    public void testCreateAccountPhonePatienta(PatientFacadeData patientFacadeData) {
      ...
    patientFacade.createAccountPhonePatient(patientForm1);
      ...
    }
...

Я просто хочу использовать @ParameterizedTest для управления моим вводом.

1 Ответ

0 голосов
/ 06 июля 2019

Spring Boot 1.5.x зависит от Spring Framework 4.3.x, но последний не обеспечивает встроенную поддержку JUnit Jupiter (он же JUnit 5).

Итак, если вы хотите использовать Spring Framework4.3.x с JUnit Jupiter, единственный вариант - использовать мой проект spring-test-junit5 .

Как только вы настроите зависимость от spring-test-junit5, у вас будет доступ кSpringExtension для Юпитера Юпитера.Это заменит SpringRunner для JUnit 4.

После этого вы сможете переписать свой тестовый класс способом, подобным следующему.Я не могу предоставить вам точный рабочий пример, поскольку у меня нет доступа к типам в вашем проекте.

@ExtendWith(SpringExtension.class)
@ExtendWith(MockitoExtension.class)
public class PatientFacadeTestParameterized {

    @Autowired
    PatientFacade patientFacade;

    @Transactional
    @ParameterizedTest(name = "{index}: {0}")
    @YamlFileSource(resources = {"logistics/patient_facade.yaml"})
    public void testCreateAccountPhonePatienta(PatientFacadeData patientFacadeData) {
        // ...
        patientFacade.createAccountPhonePatient(patientForm1);
        // ...
    }

Что отвечает за введение PatientFacadeData в ваш метод тестирования?@YamlFileSource позаботится об этом?

Кстати, вам практически никогда не нужно использовать TestContextManager непосредственно в ваших тестах.SpringRunner и SpringExtension справятся с этим.

...