title: Spring JUnit: How to Mock autowired component in autowired component
body: <p>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. </p>
  
  <p>How should I do that?</p>
  
  <p>This is the class I want to test:</p>
  
  <pre><code>@Component
  public final class TestedClass{
  
      @Autowired
      private Resource resource;
  
      @PostConstruct
      private void init(){
          //I need this to return different result
          resource.getSomething();
      }
  }
  </code></pre>
  
  <p>And this is the base of a test case:</p>
  
  <pre><code>@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"));
      }
  }
  </code></pre>
  
  <p>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?</p>