测试Spring Portlet MVC 中的Controller有两种方法,一种是用mock对象,一种是用TestContext框架

测试1:用mock 对象测试Controller。我们把所有Controller用到或者依赖的对象全部mock掉。

 
  
  1. public class AddBookControllerTest { 
  2. //这是被测试的Controller类的实例
  3. private AddBookController addBookController; 
  4. //因为Controller依赖某些Service,所以我们创造这些Service的mock对象
  5. private BookService bookService= new MockBookService(); 
  6.  
  7. @Before 
  1. public void setUp() { 
  2. addBookController = new AddBookController(); 
  3. addBookController.setBookService(bookService); 
  4.  
  5. @Test 
  6. public void testShowAddBookForm() { 
  7. //这个测试用例测试一个render方法
  8. //我们首先创造一个RenderResponse的mock对象
  9. //调用mock对象上的被测试的方法并且比较返回值
  10. RenderResponse response = new MockRenderResponse(); 
  11. assertEquals("addBookForm"
  12. addBookController.showAddBookForm(response)); 
  13.  
  14. @Test 
  15. public void testAddBook() { 
  16. //这个测试用例测试一个action方法
  17. Book book = new Book("test book""test author", 1234567890L); 
  18. MockActionResponse response = new MockActionResponse(); 
  19. //我们调用被测试的方法,让它加入一本书
  20. addBookController.addBook(book, 
  21. new BindException(book, "book"), response, 
  22. new SimpleSessionStatus()); 
  23. //比较结果
  24. assertNotNull(bookService.getBook(1234567890L)); 
  25. assertEquals("books", response.getRenderParameter("myaction")); 

 

测试2:我们用TestContext框架来进行测试。

 

 
  
  1. //@RunWith用来指定运行这些测试的Runner
  2. @RunWith(SpringJUnit4Cla***unner.class
  3. //@ContextConfiguration用来指定运行这些测试所用到的Spring应用上下文
  4. @ContextConfiguration
  5. locations="classpath:bookCatalogTest-portlet.xml" 
  6. @TestExecutionListeners(value = 
  7. { DependencyInjectionTestExecutionListener.class } 
  8. public class AddBookControllerTestContext extends 
  9. AbstractJUnit4SpringContextTests { 
  10. @Autowired 
  11. @Qualifier("addBookController"
  12. private AddBookController addBookController; 
  13. @Autowired 
  14. @Qualifier("myBookService"
  15. private BookService bookService; 
  16. @Autowired 
  17. private Validator validator; 
  18. @Test 
  19. public void testShowAddBookForm() { 
  20. RenderResponse response = new MockRenderResponse(); 
  21. assertEquals("addBookForm"
  22. addBookController.showAddBookForm(response)); 
  23. ... 
  24. @Test 
  25. public void testBook() { 
  26. Set<ConstraintViolation<Book>> violations = 
  27. validator.validate(new Book()); 
  28. int[] actual = {violations.size()}; 
  29. int[] expected = {4}; 
  30. assertArrayEquals(expected, actual);