@Autowired with JUnit tests

14,474

Solution 1

I've finally found a solution to my problem. Find this post SpringBeanAutowiringSupport does not inject beans in jUnit tests and do something like this the JUnit tests works.

Solution 2

Try running your unit tests with a spring runner instead.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:config/applicationContext.xml",
                 "classpath:config/test-datasources.xml"})
public class MyTest {

   @Autowired private IManager manager;

   @Test public void someTest() {
     assertNotNull(manager);
   }
}

It will load the config only once and when needed, and it will autowire your junit class

Share:
14,474
bigster
Author by

bigster

Updated on June 04, 2022

Comments

  • bigster
    bigster almost 2 years

    I´ve using JUnit but some tests have some issues, these tests have @Autowired annotation inside the Spring beans and when i reference them the beans that are @Autowired were always NULL.

    Here is the example code:

         public class Test {
    
                     protected ApplicationContext ac;
    
                     @Before
                     public void setUp() {
                         ac = new FileSystemXmlApplicationContext("classpath:config/applicationContext.xml"
                         "classpath:config/test-datasources.xml");
                     }
    
                     @Test
                     public void testRun() throws Exception {
                            IManager manager =  (IManager)this.ac.getBean("manager");
                            manager.doSomething();
                     }
        }
    
        @Service
        public class Manager implements IManager {
    
                public boolean doSomething() throws Exception {
                     ParametersJCSCache parametersJCSCache = new ParametersJCSCache();
                     String paramValue = parametersJCSCache.getParameter("XPTO");
                     ...
                }
        }
    
        public class ParametersJCSCache extends SpringBeanAutowiringSupport {
    
              @Autowired
              private IParameterManager parameterManager;  //THIS IS NULL
        }
    

    When invoking the Manager object the Spring generates the proxy but when accessing the @Autowired parameterManager the object is null, and with this issue i can´t test this method.

    Any idea what is causing this? Why does the object not get injected? It works well in the context of a web application, but in the test context is always NULL.