我有一个JUnit测试,看起来像这样。
@RunWith(JUnitParamsRunner.class)
public class ProcessnDbUnitTest extends DbunitTestParent {
@Autowired
private ProcessRepositiory pr;
private static List<Object[]> allProcessIds = new ArrayList<>();
private static Object[][] result = new Object[allPDRIds.size()][];
private static List<Process> process = new ArrayList<>();
@Before
public void before() {
processes = pr.findAll();
pr.findAll().stream().forEach(process -> allProcessIds.add(new Object[] { process.getId() }));
result = new Object[allProcessIds.size()][];
}
DbUnitTestParent:
@ContextConfiguration(classes = DbUnitApplication.class)
@RunWith(Suite.class)
@SuiteClasses({UserDbUnitTest.class, ProcessDbUnitTest.class })
public class DbunitTestParent extends AbstractTransactionalJUnit4SpringContextTests {
@PersistenceContext
private EntityManager em;
@After
public final void flush() {
em.flush();
}
}
在这种情况下,测试本身并不重要。字段是静态的,因为 @Before
方法正在为一个参数化测试获取东西。
当我在调试测试时,我看到在 before()
方法,自动接线的 ProcessRepository
是空的。奇怪的是,在另一个非常类似的测试中,一切都很正常... ... 为什么会发生这种情况?
类又名bean集 Autowired Annotation需要Spring Context来初始化和管理,如果你想使用这个注解,你应该使用SpringJUnit4ClassRunner,如果不是你可以使用Mockito来模拟它。