簡體   English   中英

Junit測試用例與Mockito和Spring MVC一起使用

[英]Junit test case falling with Mockito and 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)

可能是因為您正在模擬要測試的控制器。 您應該嘗試以下方法:

@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的模擬程序將其所有方法調用替換為默認行為,因此,當您的獨立實現到達該方法時,它只會返回一個空字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM