Trying to write a junit test in Spring using JavaConfig

I am trying to write a junit test for my sample project, but don't know how to access ApplicationContext in jUnit test:

Here is the main class of the project that works:

public static void main(String[] args) { // in this setup, both the main(String[]) method and the JUnit method both specify that ApplicationContext context = new AnnotationConfigApplicationContext( HelloWorldConfiguration.class ); MessageService mService = context.getBean(MessageService.class); HelloWorld helloWorld = context.getBean(HelloWorld.class); /** * Displaying default messgae */ LOGGER.debug("Message from HelloWorld Bean: " + helloWorld.getMessage()); /** * Saving Message to database */ Message message = new Message(); message.setMessage(helloWorld.getMessage()); mService.SaveMessage(message); /** * Settting new message in bean */ helloWorld.setMessage("I am in Staten Island, New York"); LOGGER.debug("Message from HelloWorld Bean: " + helloWorld.getMessage()); /** * Saving Message in database. */ message.setMessage(helloWorld.getMessage()); mService.SaveMessage(message); /** * Getting messages from database * - display number of message(s) * - display each message in database */ List<Message> myList = mService.listMessages(); LOGGER.debug("You Have " + myList.size() + " Message(s) In The Database"); for (Message i : myList) { LOGGER.debug("Message: ID: " + i.getId() + ", Message: " + i.getMessage() + "."); } } 

Now here is the junit test:

 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = HelloWorldConfiguration.class) public class TestApp { @Test public void testBean() { HelloWorld helloWorld = context.getBean(HelloWorld.class); helloWorld.setMessage("I Love Dogs"); Assert.assertEquals(helloWorld.getMessage(), "I Love Dogs"); } } 
+6
source share
1 answer

You can use auto-loading. Please note that in most cases, you are not interested in the application context itself, but in one or more beans associated with it. The following are two examples that essentially do the same thing:

 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = HelloWorldConfiguration.class) public class TestApp { @Autowired HelloWorld helloWorld; @Test public void testBean() { helloWorld.setMessage(...); // asserts, etc. } } 

 @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = HelloWorldConfiguration.class) public class TestApp { @Autowired ApplicationContext applicationContext; HelloWorld helloWorld; @Before public void setUp() { helloWorld = context.getBean(HelloWorld.class); } @Test public void testBean() { helloWorld.setMessage(...); // asserts, etc. } } 

For more information, see the reference documents .

+12
source

Source: https://habr.com/ru/post/943965/


All Articles