JUnit4 - @Before注解方法中的@Autowired服务为空。

问题描述 投票:0回答:1

我有一个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 是空的。奇怪的是,在另一个非常类似的测试中,一切都很正常... ... 为什么会发生这种情况?

java unit-testing junit junit4 autowired
1个回答
1
投票

类又名bean集 Autowired Annotation需要Spring Context来初始化和管理,如果你想使用这个注解,你应该使用SpringJUnit4ClassRunner,如果不是你可以使用Mockito来模拟它。

© www.soinside.com 2019 - 2024. All rights reserved.