2013-04-30 25 views
6

Sto cercando di scrivere un test JUnit per il mio progetto di esempio, ma non sanno come accedere alla ApplicationContext nel test JUnit:cercando di scrivere test JUnit in primavera con JavaConfig

Ecco la classe principale del progetto che funziona:

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() + "."); 
     } 
    } 

Ora qui è il test JUnit:

@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"); 
    } 
} 

risposta

12

è possibile utilizzare autowiring. Nota, la maggior parte delle volte non ti interessa il contesto dell'applicazione stesso, ma in uno o più bean ad esso associati. Qui di seguito sono due esempi che fa essenzialmente la stessa cosa:

@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. 
    } 
} 

vedere i reference docs per i dettagli.