2013-04-30 94 views
6

我試圖寫一個JUnit測試我的示例項目,但不知道如何訪問ApplicationContext在JUnit測試:試圖寫JUnit測試在春天與JavaConfig

這裏是主類的項目工程:

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

現在這裏是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"); 
    } 
} 

回答

12

您可以使用自動裝配。請注意,大多數情況下,您對應用程序上下文本身不感興趣,但在與其關聯的一個或多個bean中不感興趣。下面是兩個例子,基本上做同樣的事情:

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

reference docs瞭解詳情。