2012-07-30 37 views
7

Bây giờ tôi đang viết trường hợp thử nghiệm của lớp học của tôi. Tôi muốn chuyển tham số đối tượng HttpServletRequest đến phương thức test của tôi để kiểm tra xem phương thức này có đang hoạt động hay không. Vì vậy, bất kỳ ai cho tôi gợi ý về điều đó.Làm cách nào để vượt qua đối tượng HttpServletRequest đối với trường hợp thử nghiệm?

public void testCheckBatchExecutionSchedule() throws Exception 
    { 
     assertTrue("Batch is Completed :", returnPointsRatingDisputeFrom.checkBatchExecutionSchedule(request)); 
    } 

Trả lời

4

HttpServletRequest là giao diện. Trong quá khứ, tôi vừa tạo một lớp (chẳng hạn như TestHttpServletRequest) có một phương thức trống cho mỗi phương thức trong HttpServletRequest, ngoại trừ những cái tôi thực sự cần. Đối với hầu hết các phương thức, tôi đã trả về một biến cá thể và bao gồm một setter cho biến cá thể đó để trường hợp kiểm thử có thể xác định những gì cần trả lại. HttpServletRequest có rất nhiều phương pháp, nhưng hầu hết các IDE (tôi sử dụng Eclipse) đều có thể tạo ra các phương thức khai báo.

Sự cố với HttpServletRequestWrapper là nó vẫn yêu cầu một mã khác HttpServletRequest được chuyển vào hàm tạo của nó để đóng vai trò là hành vi mặc định cho mỗi phương thức. Đi qua null kết quả trong một NullPointerException.

-1

Bằng cách sử dụng API do tomcat bạn có thể nhận HttpServletRequest đối tượng

HttpServletRequest request = (HttpServletRequest)org.apache.catalina.core.ApplicationFilterChain.getLastServicedRequest(); 

này sẽ nhận được yêu cầu cuối cùng được truyền cho một servlet cho phục vụ từ thread hiện hành.

Công việc này chỉ ở chế độ "Tuân thủ nghiêm ngặt Servlet" của Tomcats. Để kích hoạt nó Thêm tham số JVM sau:

org.apache.catalina.STRICT_SERVLET_COMPLIANCE=true 
10

bạn nên thử ra các đối tượng yêu cầu sử dụng một thư viện mocking, như http://code.google.com/p/mockito/

public void testCheckBatchExecutionSchedule() throws Exception 
{ 
    HttpServletRequest mockRequest = mock(HttpServletRequest.class); 
    //setup the behaviour here (or do it in setup method or something) 
    when(mockRequest.getParameter("parameterName")).thenReturn("someValue"); 
    assertTrue("Batch is Completed :", returnPointsRatingDisputeFrom.checkBatchExecutionSchedule(mockRequest)); 
} 
22

Spring cung cấp một lớp được gọi là MockHttpServletRequest, có thể được sử dụng để kiểm tra mã cần một HttpServletRequest.

public void testCheckBatchExecutionSchedule() throws Exception 
{ 
    MockHttpServletRequest request = new MockHttpServletRequest(); 
    request.addParameter("parameterName", "someValue"); 
    assertTrue("Batch is Completed :", returnPointsRatingDisputeFrom.checkBatchExecutionSchedule(request)); 
} 
+0

tôi đã tìm thấy mocks khác của lớp này trực tuyến và đây là chỉ một cái bao gồm logic hoạt động tương tự như lớp gốc. Ví dụ, 'getRequestURL()' thực sự lắp ráp một URL từ các thuộc tính khác, không chỉ sửa lại những gì được chỉ định với 'setRequestURL()' hoặc một hàm tạo. –

0

Cập nhật tháng 2 năm 2018: OpenBrace Limited has closed down và sản phẩm ObMimic không còn được hỗ trợ.

Bạn cũng có thể sử dụng ObMimic thư viện của Servlet API thử đôi:

import com.openbrace.obmimic.mimic.servlet.http.HttpServletRequestMimic; 

public void testCheckBatchExecutionSchedule() throws Exception 
{ 
    HttpServletRequestMimic request = new HttpServletRequestMimic(); 
    // Configure the request as necessary... 
    // e.g. request.getMimicState().getRequestParameters().set("name", "value"); 
    assertTrue("Batch is Completed :", returnPointsRatingDisputeFrom.checkBatchExecutionSchedule(request)); 
} 

Để cấu hình theo yêu cầu, các HttpServletRequestMimic có một phương pháp getMimicState() trả về một HttpServletRequestState thông qua đó tất cả các chi tiết liên quan được yêu cầu có thể được cấu hình (và thông qua đó bạn có thể truy cập bất kỳ ServletContext liên quan, HttpSession vv và cấu hình tương tự nếu cần). Tài liệu cho HttpServletRequestState bao gồm summary thuộc tính và phương thức của nó cũng như đầy đủ chi tiết Javadoc.

Lưu ý rằng:

  • ObMimic cũng cung cấp tương tự như các lớp học "bắt chước" cho HttpServletResponse, ServletContext, HttpSession, ServletConfig, vv

  • Một miễn phí "Community Edition" của ObMimic có sẵn từ trang web của download trang.

  • Thư viện duy nhất bạn cần thêm vào dự án của mình là Oblimic /lib/obmimic.jar (giả sử chính Servlet API đã có mặt).

  • Trang web ObMimic cung cấp đầy đủ tài liệu, trong đó có một hướng dẫn Getting Started, một bộ How To hướng dẫn với mã ví dụ, chi tiết Javadoc, vv

Các vấn đề liên quan