2

このメソッドを MockMvc でテストしたい

    @RequestMapping("/saveCandidate")
        public String saveCandidate(
                Model model,
                @ModelAttribute("candidateFromRequest") @Validated()  Candidate candidateFromRequest,
                BindingResult result,
                @ModelAttribute("skillsIdList") Set<Skill> skills,
                @ModelAttribute("vacanciesForCandidate") Set<Vacancy> vacanciesForCandidate,
                @ModelAttribute("eventsForCandidate") Set<Event> eventsForCandidate,
                RedirectAttributes redirectAttributes){
...


}

テストメソッドからsaveCandidateメソッドにBindingResult結果のモックを渡すにはどうすればよいですか?

私のテスト方法:

        @Test
            public void saveCandidateWithErrors() throws Exception{
                BindingResult result= mock(BindingResult.class);

                when(result.hasErrors()).thenReturn(true);
                when(candidateService.findByName(anyString())).thenReturn(new ArrayList<Candidate>());

                MockHttpServletRequestBuilder request = MockMvcRequestBuilders.get("/saveCandidate");
         if(result.hasErrors())
                  //how test code that writing here?
        }
         else{
             //I always hit it here
       }
}

モックの結果をリクエストするように設定したい

4

1 に答える 1

3

できません(できますが、手間をかける価値はありません)。BindingResultSpring がコマンド オブジェクトを作成するときに作成し、saveCandidateハンドラー メソッドを呼び出すときにそれを渡すオブジェクトです。

Spring が提供するクラスとオブジェクトをテストするべきではありません。正しいまたは間違った要求パラメーターを入力したときに、それらがどのように解決されるかをテストする必要があります。


価値がない理由を説明するには:

Spring は、HandlerMethodArgumentResolverRequestMappingHandlerMapping、およびHandlerMethodインスタンスのスタックを使用して、 に到着するリクエストを処理しDispatcherServletます。aBindingResultをモックすることは、それらすべてをモックまたはサブクラス化する必要があることを意味する可能性が非常に高いです。

于 2013-10-04T13:40:19.543 に答える