1

私はmockitoを使用してテストしようとしているコントローラークラスを持っています。

@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)
4

1 に答える 1

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 のモックには、すべてのメソッド呼び出しがデフォルトの動作で置き換えられるため、スタンドアロンの実装がメソッドに到達すると、空の文字列が返されます。

于 2017-06-16T19:20:47.783 に答える