@Autowired bean在Test Listener类中为null

时间:2014-05-28 23:32:09

标签: spring unit-testing autowired spring-test

这个问题在Using Autowired in a TestExecutionListener class for BeforeClass junit之前被问到,但它没有得到回答。我面临着同样的问题,但没有找到解决方案

示例:我正在使用null mapper。

public class CustomExecutionListener extends AbstractTestExecutionListener {


@Autowired
private Mapper mapper;

@Override
public void beforeTestClass(TestContext testContext) {}
... some code...
}

测试类:注意:AppConfig包含定义的Mapper Bean。

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners(listeners = {DependencyInjectionTestExecutionListener.class, CustomExecutionListener.class})
@ContextConfiguration(classes = {AppConfig.class})
public class AccountControllerTest {
....
}

2 个答案:

答案 0 :(得分:2)

TestExecutionListener个实例不支持依赖注入。

仅对测试实例支持依赖注入。

因此,如果您的CustomExecutionListener需要从ApplicationContext访问bean,则必须手动查找 - 例如,如下所示:

public void beforeTestClass(TestContext testContext) {

    Mapper mapper = testContext.getApplicationContext().getBean(Mapper.class);

    // ... some code...

}

此致

Sam(Spring TestContext Framework的作者)

答案 1 :(得分:0)

您也可以尝试以下操作:Mapper mapper = Mappers.getMapper(Mapper.class);