I am getting a NullPointerException while testing Spring Junit test configurations. The issue is with using the @ContextConfiguration and the @Autowired annotation.
When I instantiate the context and get a reference to the bean directly, as shown with the commented out code in the test method, the test runs correctly and succeeds. But when I try to use the @ContextConfiguration and @autowired annotations, with the same XML file attribute I get a NullPointerException in my assertEquals statement. Do you have any idea what I’m doing wrong?
package com.greathouse.helloworld.HelloWorldTest;
import javax.inject.Inject;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import junit.framework.TestCase;
@ContextConfiguration(locations = {"classpath:/resources/application-config.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class AppTest extends TestCase
{
@Autowired
MessageService messageService;
@Test
public void testApp()
{
//ApplicationContext context = new ClassPathXmlApplicationContext("classpath:/resources/application-config.xml");
//messageService = context.getBean("printMessage", MessageService.class);
assertEquals( messageService.getMessage(), "Hello World" );
}
}
It looks like messageService did not get autowired. It would help if you put messageService as required.
This way when spring context starts spring will tell you why it didn’t autowire your component.
Also as a side note, since you are using JUnit 4 your test does not need to extend from TestCase.