在Junit5中使用@ParameterizedTest时如何使用@Autowire

时间:2019-07-05 08:38:16

标签: junit5

我目前使用SpringBoot1.5和Junit5。     使用注解@ParameterizedTest进行参数测试时,如何使用@autowire进行依赖项注入,因为我需要与数据库进行交互。

我尝试使用

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 :(得分:0)

Spring Boot 1.5.x依赖于Spring Framework 4.3.x,但是后者不提供对JUnit Jupiter(又称JUnit 5)的内置支持。

因此,如果要在JUnit Jupiter中使用Spring Framework 4.3.x,唯一的选择是使用我的spring-test-junit5项目。

一旦在spring-test-junit5上配置了依赖性,就可以访问JUnit Jupiter的SpringExtension。这将替换JUnit 4的SpringRunner

然后,您应该能够以类似于以下的方式重写测试类。我无法为您提供确切的工作示例,因为我无权访问您项目中的类型。

@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会照顾吗?

顺便说一句,您几乎不需要在测试中直接使用TestContextManagerSpringRunnerSpringExtension会为您处理。

相关问题