測試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,如需轉載請自行聯系原作者