2013-07-29 2 views
0

Je suis nouveau au printemps et au junit. Je veux tester mon controllerusing mockito.J'ai écrit un cas de test en utilisant mock-mvc mais un de mes aînés a dit d'essayer avec mockito. Je l'ai cherché dans google je n'ai aucune idée sur les tests unitaires mockito.Comment écrire le cas de test 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); 
    } 

Mon cas de test maquette est 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()); 

    } 

Quelqu'un pourrait-il me aider?

+0

Pourriez-vous publier votre "getUserByName (userClient, firstName, lastName);" extrait de code de mise en œuvre? – Hippoom

+0

J'ai appelé la méthode getUserByName de jar. C'est une API séparée – jackyesind

+0

Est-ce une méthode statique parce que je ne vois pas de référence d'objet? – Hippoom

Répondre

1

1.Définir ce Mockito client dans un fichier XML, nous allons l'appeler le client mock.xml

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

Vous pourriez avoir à ajouter à votre cglib classpath si le client n'est pas une interface.

2.Seperformer votre client "réel" à partir de votre-servlet-context.xml, afin qu'il ne soit pas chargé dans les tests.

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()); 

    } 

} 

Par ailleurs, il n'a pas d'importance si vous utilisez Mockito ou non si ce n'est pas très complexe ou coûteux à utiliser Client « réel » dans les tests.

Vous pouvez obtenir Mockito Doc ici.

+0

Je vais tester et vous mettre à jour – jackyesind

+0

org.Client C'est un fichier de classe. et quand j'ajoute @ContextConfiguration (locations = {"chemin de classe: META-INF/client-répartiteur-servlet.xml"}) il montre l'erreur sur le cas de test – jackyesind

+0

Quelle erreur? Je ne peux pas regarder votre écran après tout. – Hippoom

Questions connexes