2009-05-18 34 views
13

Tôi đang di chuyển bộ điều khiển Spring MVC để sử dụng chú thích kiểu mới hơn và muốn đơn vị kiểm tra phương pháp điều khiển xác thực đối tượng lệnh (xem ví dụ đơn giản bên dưới).Mocking Spring MVC BindingResult khi sử dụng chú thích

@RequestMapping(method = RequestMethod.POST) 
public String doThing(Command command, BindingResult result, 
        HttpServletRequest request, HttpServletResponse response, 
        Map<String, Object> model){ 
    ThingValidator validator = new ThingValidator(); 
    validator.validate(command, result); 
... other logic here 
    } 

Vấn đề của tôi là tôi phải gọi phương thức của bộ điều khiển trong thử nghiệm đơn vị của tôi, và cung cấp các giá trị giả để đáp ứng chữ ký của mình để thực hiện mã đúng, và tôi không thể làm việc ra làm thế nào để chế nhạo một BindingResult.

Trong kiểu cũ Bộ điều khiển chữ ký đơn giản lấy một HttpServletRequest và HttpServletResponse, dễ dàng giả lập, nhưng do tính linh hoạt của kiểu chú thích mới, người ta phải vượt qua rất nhiều thông qua chữ ký.

Làm thế nào người ta có thể giả lập Spring BindingResult để sử dụng trong một bài kiểm tra đơn vị ??

Trả lời

15

BindingResult là một giao diện để bạn có thể không đơn giản vượt qua một trong những triển khai của Springs trên giao diện đó?

tôi không sử dụng các chú thích trong mã Spring MVC của tôi, nhưng khi tôi muốn thử nghiệm phương thức validate của một validator Tôi chỉ vượt qua trong một thể hiện của BindException và sau đó sử dụng các giá trị nó sẽ trả về trong assertEquals, vv

+4

Xin chào Mark, điều đó giúp tôi đi đúng hướng. Sử dụng BindingResult bindingResult = new BeanPropertyBindingResult (lệnh, "lệnh"); và gắn kết đối tượng lệnh trong mô hình trong thử nghiệm của tôi dường như sắp xếp kiểm tra của tôi. –

+1

Đó là cách tôi cũng làm như vậy. –

+0

Cảm ơn vì điều đó, đã giúp tôi rất nhiều! – Stefan

14

bạn cũng có thể sử dụng giống như Mockito để tạo ra một mô hình của BindingResult và thông qua đó để phương pháp điều khiển của bạn, ví dụ:

import static org.mockito.Mockito.mock; 
import static org.mockito.Mockito.when; 
import static org.mockito.Mockito.verifyZeroInteractions; 

@Test 
public void createDoesNotCreateAnythingWhenTheBindingResultHasErrors() { 
    // Given 
    SomeDomainDTO dto = new SomeDomainDTO(); 
    ModelAndView mv = new ModelAndView(); 

    BindingResult result = mock(BindingResult.class); 
    when(result.hasErrors()).thenReturn(true); 

    // When 
    controller.create(dto, result, mv); 

    // Then 
    verifyZeroInteractions(lockAccessor); 
} 

này có thể cung cấp cho bạn linh hoạt hơn và đơn giản hóa giàn giáo.

+0

'lockAccessor' ở đây là gì? –

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