2017-06-16 60 views
1

我有一個控制器類,我試圖用mockito進行測試。Junit測試用例與Mockito和Spring MVC一起下降

@Controller 
public class LoginController { 
    final static Logger logger = Logger.getLogger(LoginController.class); 
    private StaffService staffService; 
    @Autowired 
    public LoginController(StaffService staffService) { 
     this.staffService = staffService; 
    } 

    @RequestMapping(value = "/", method = RequestMethod.GET) 
    public String showLoginPage(Model model) { 
     model.addAttribute("loginBean", new LoginBean()); 
     return "login"; 
    }} 

我的測試類如下顯示: -

@RunWith(MockitoJUnitRunner.class) 
public class LoginControllerTest { 
    private static MockMvc mockMvc; 
    @Mock 
    private static LoginController loginController; 

    @Before 
    public void setUp() { 
     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
     viewResolver.setPrefix("/WEB-INF/"); 
     viewResolver.setSuffix(".jsp"); 
     mockMvc = MockMvcBuilders.standaloneSetup(loginController).setViewResolvers(viewResolver).build(); 
    } 

    @Test 
    public void testShowLoginPage() throws Exception { 
    loginController.showLoginPage(new ExtendedModelMap()); 
     mockMvc.perform(get("/")).andExpect(view().name("login")); 
    } 

} 

但是,當我運行測試類我得到下面的錯誤。請幫忙 !

java.lang.AssertionError: View name expected:<login> but was:<> 
    at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:54) 
    at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:81) 
    at org.springframework.test.web.servlet.result.ViewResultMatchers$2.match(ViewResultMatchers.java:69) 
    at org.springframework.test.web.servlet.MockMvc$1.andExpect(MockMvc.java:171) 
    at com.expensecalculator.controller.test.LoginControllerTest.testShowLoginPage(LoginControllerTest.java:38) 

回答

2

這可能是因爲你在嘲笑你正在測試的控制器。而應該試試這個:

@RunWith(MockitoJUnitRunner.class) 
public class LoginControllerTest { 
    private MockMvc mockMvc; 
    private static LoginController loginController; 

    @Mock 
    private StaffService staffService; 

    @Before 
    public void setUp() { 
     loginController = new LoginController(staffService); 

     InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); 
     viewResolver.setPrefix("/WEB-INF/"); 
     viewResolver.setSuffix(".jsp"); 
     mockMvc = MockMvcBuilders.standaloneSetup(loginController).setViewResolvers(viewResolver).build(); 
    } 

     @Test 
     public void testShowLoginPage() throws Exception { 
     mockMvc.perform(get("/")).andExpect(view().name("login")); 
     } 
} 

的Mockito的模擬其所有的方法調用由默認的行爲代替,所以當你的獨立執行到達方法只是返回一個空字符串。