2013-04-30 12 views
6

Próbuję napisać test junit za moim przykładem projektu, ale nie wiem, jak uzyskać dostęp do ApplicationContext w teście JUnit:próbuje pisać testu junit wiosną z JavaConfig

Oto głównej klasy projekt, który działa:

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

teraz tutaj jest 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"); 
    } 
} 

Odpowiedz

12

można użyć autowiring. Uwaga: najczęściej nie interesuje Cię sam kontekst aplikacji, ale jeden lub więcej komponentów, które są z nią powiązane. Poniżej znajdują się dwa przykłady, które w zasadzie robi to samo:

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

zobaczyć reference docs szczegóły.

Powiązane problemy