天天看點

(Portal 開發讀書筆記)Spring Portlet MVC 測試Controller

 測試Spring Portlet MVC 中的Controller有兩種方法,一種是用mock對象,一種是用TestContext架構

測試1:用mock 對象測試Controller。我們把所有Controller用到或者依賴的對象全部mock掉。

public class AddBookControllerTest { 

//這是被測試的Controller類的執行個體

private AddBookController addBookController; 

//因為Controller依賴某些Service,是以我們創造這些Service的mock對象

private BookService bookService= new MockBookService(); 

@Before 

public void setUp() { 

addBookController = new AddBookController(); 

addBookController.setBookService(bookService); 

@Test 

public void testShowAddBookForm() { 

//這個測試用例測試一個render方法

//我們首先創造一個RenderResponse的mock對象

//調用mock對象上的被測試的方法并且比較傳回值

RenderResponse response = new MockRenderResponse(); 

assertEquals("addBookForm", 

addBookController.showAddBookForm(response)); 

public void testAddBook() { 

//這個測試用例測試一個action方法

Book book = new Book("test book", "test author", 1234567890L); 

MockActionResponse response = new MockActionResponse(); 

//我們調用被測試的方法,讓它加入一本書

addBookController.addBook(book, 

new BindException(book, "book"), response, 

new SimpleSessionStatus()); 

//比較結果

assertNotNull(bookService.getBook(1234567890L)); 

assertEquals("books", response.getRenderParameter("myaction")); 

測試2:我們用TestContext架構來進行測試。

//@RunWith用來指定運作這些測試的Runner

@RunWith(SpringJUnit4ClassRunner.class) 

//@ContextConfiguration用來指定運作這些測試所用到的Spring應用上下文

@ContextConfiguration( 

locations="classpath:bookCatalogTest-portlet.xml" 

@TestExecutionListeners(value = 

{ DependencyInjectionTestExecutionListener.class } 

public class AddBookControllerTestContext extends 

AbstractJUnit4SpringContextTests { 

@Autowired 

@Qualifier("addBookController") 

@Qualifier("myBookService") 

private BookService bookService; 

private Validator validator; 

... 

public void testBook() { 

Set<ConstraintViolation<Book>> violations = 

validator.validate(new Book()); 

int[] actual = {violations.size()}; 

int[] expected = {4}; 

assertArrayEquals(expected, actual); 

本文轉自 charles_wang888 51CTO部落格,原文連結:http://blog.51cto.com/supercharles888/845940,如需轉載請自行聯系原作者