2013-07-29 6 views
0

Я новичок в весне и юните. Я хочу протестировать мой контроллер, используя mockito.I написал тестовый пример, используя mock-mvc , но один из моих старших сказал, попробуйте с mockito. Я искал его в google, я понятия не имею о тестировании модульного устройства.Как написать тестовый кейс Mockito

@Autowired 
private Client client; 

@RequestMapping(value = "/user", method = RequestMethod.GET) 
    public String initUserSearchForm(ModelMap modelMap) { 
     User user = new User(); 
     modelMap.addAttribute("User", user); 
     return "user"; 
    } 

    @RequestMapping(value = "/byName", method = RequestMethod.GET) 
    @ResponseStatus(HttpStatus.OK) 
    public 
    @ResponseBody 
    String getUserByName(HttpServletRequest request,@ModelAttribute("userClientObject") UserClient userClient) { 
     String firstName = request.getParameter("firstName"); 
     String lastName = request.getParameter("lastName"); 
     return client.getUserByName(userClient, firstName, lastName); 
    } 

Мой макет тест MVC является

@Test 
    public void testInitUserSearchForm() throws Exception { 
     this.liClient = client.createUserClient(); 
     mockMvc.perform(get("/user")) 
       .andExpect(status().isOk()) 
       .andExpect(view().name("user")) 
       .andExpect(forwardedUrl("/WEB-INF/pages/user.jsp")); 
    } 

    @Test 
    public void testGeUserByName() throws Exception { 
     String firstName = "Wills"; 
     String lastName = "Smith";   
     mockMvc.perform(get("/user-byName")) 
       .andExpect(status().isOk()); 

    } 

Может кто-нибудь мне помочь?

+0

Не могли бы вы разместить свое «getUserByName (userClient, firstName, lastName)»; фрагмент кода реализации? – Hippoom

+0

Я вызвал метод getUserByName из jar. Это отдельный API – jackyesind

+0

Является ли это статическим методом, потому что я не вижу ссылку на объект? – Hippoom

ответ

1

1.Define этот клиент Mockito в XML, давайте назовем его клиент-mock.xml

<bean id="client" class="org.mockito.Mockito" factory-method="mock"> 
    <constructor-arg value="your org.Client" /> //interface name 
</bean> 

Вы могли бы добавить к вашему CGLIB, если Клиент классам не является интерфейсом.

2.Убедитесь, что ваш клиент «реален» из вашего-servlet-context.xml, поэтому он не будет загружен в тесте.

import static org.mockito.Mockito.*; 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "classpath:your-servlet-context.xml", 
    "classpath:client-mock.xml" }) 
@WebAppConfiguration 
public class YourTests { 

    @Autowired 
    private Client client; 

    @Test 
    public void testGeUserByName() throws Exception { 
     String firstName = "Wills"; 
     String lastName = "Smith";   
     String returning = //JSON I presume 

     UserClient userClientObject = ;//init 

     when(client).getUserByName(userClientObject, firstName, lastName) 
     .thenReturn(returning);//define stub call expectation 


     mockMvc.perform(get("/user-byName").sessionAttr("userClientObject", userClientObject)) 
      .andExpect(status().isOk()); 

    } 

} 

Кстати, это не имеет значения, используете ли вы Mockito или нет, если это не очень сложный и дорогой, чтобы использовать «реальные» Клиент в тестах.

Здесь вы можете получить Mockito Doc.

+0

Я буду тестировать и обновлять вас – jackyesind

+0

org.Client Это файл класса. и когда я добавляю @ContextConfiguration (location = {"classpath: META-INF/client-dispatcher-servlet.xml"}), он показывает ошибку на тестовом примере – jackyesind

+0

Какая ошибка? В конце концов, я не могу смотреть ваш экран. – Hippoom

Смежные вопросы