最佳答案
我有一个我想测试的 Spring 组件,这个组件有一个自动连接的属性,为了进行单元测试,我需要更改这个属性。问题是,这个类在 post-construction 方法中使用了 autowired 组件,所以在实际使用之前我无法替换它(比如通过 RefectionTestUtils)。
我该怎么做?
这就是我想测试的类:
@Component
public final class TestedClass{
@Autowired
private Resource resource;
@PostConstruct
private void init(){
//I need this to return different result
resource.getSomething();
}
}
这是一个测试案例的基础:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= "classpath:applicationContext.xml")
public class TestedClassTest{
@Autowired
private TestedClass instance;
@Before
private void setUp(){
//this doesn't work because it's executed after the bean is instantiated
ReflectionTestUtils.setField(instance, "resource", new Resource("something"));
}
}
在调用 poststruct 方法之前,是否有其他方法来替换资源?喜欢告诉 Spring JUnit 运行器自动连接不同的实例吗?