I've got a Spring component I'd like to test and this component has an autowired attribute which I need to change for the purpose of unit testing. The problem is, that the class uses the autowired component inside the post-construct method so I'm not able to replace it(i.e. via ReflectionTestUtils) before it's actually used.
How should I do that?
This is the class I want to test:
@Component public final class TestedClass{ @Autowired private Resource resource; @PostConstruct private void init(){ //I need this to return different result resource.getSomething(); } }
And this is the base of a test case:
@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")); } }
Is there some way to replace the resource with something else before the postconstruct method is invoked? Like to tell Spring JUnit runner to autowire different instance?