Spring JUnit: 如何在自动装配的组件中模拟自动装配的组件

7 浏览
0 Comments

Spring JUnit: 如何在自动装配的组件中模拟自动装配的组件

我想测试一个Spring组件,这个组件有一个被自动装配的属性,我需要在单元测试中改变它。问题是,这个类在post-construct方法中使用了自动装配的组件,所以在它实际使用之前我无法替换它(例如使用ReflectionTestUtils)。

我该怎么做呢?

我想测试的类是:

@Component
public final class TestedClass{
    @Autowired
    private Resource resource;
    @PostConstruct
    private void init(){
        //我需要这里返回不同的结果
        resource.getSomething();
    }
}

这是一个测试用例的基本结构:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= "classpath:applicationContext.xml")
public class TestedClassTest{
    @Autowired
    private TestedClass instance;
    @Before
    private void setUp(){
        //这里不起作用,因为它在bean实例化之后执行
        ReflectionTestUtils.setField(instance, "resource", new Resource("something"));
    }
}

有没有办法在调用postconstruct方法之前用其他东西替换resource?比如告诉Spring JUnit运行器自动注入不同的实例?

0