繁体   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