【问题标题】:How to use @Autowire when using @ParameterizedTest in Junit5在Junit5中使用@ParameterizedTest时如何使用@Autowire
【发布时间】:2019-07-05 08:38:16
【问题描述】:

我目前使用的是 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 来管理我的输入。

【问题讨论】:

    标签: junit5


    【解决方案1】:

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

    因此,如果您想将 Spring Framework 4.3.x 与 JUnit Jupiter 一起使用,唯一的选择就是使用我的 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 为您处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-20
      • 2019-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多