我目前使用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来管理我的输入。
答案 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
会照顾吗?
顺便说一句,您几乎不需要在测试中直接使用TestContextManager
。 SpringRunner
和SpringExtension
会为您处理。