0

スプリング コントローラーのテストを作成しようとしていますが、問題があります。次のコードは、返すべきredirect:/welcomeものがありますが、常に返されます。私は何か間違ったことをしているのかもしれません。これを解決するのを手伝ってください。when(result.hasErrors()).thenReturn(true);add

コントローラ

@Controller
public class SpringController {

@Autowired
private UserService userService;

@Autowired
private CorrectValidator correctValidator;

@Autowired
private ExistValidator existValidator;

@Autowired
private Unwrapper unwrapper;

    @RequestMapping(value = "/create", method = RequestMethod.POST)
    public String create (Wrapper wrapper,
                      BindingResult result)
        throws ParseException {
        correctValidator.validate(wrapper, result);
        existValidator.validate(wrapper, result);
        if (result.hasErrors()) {
            return "add";
        }
        userService.create(unwrapper.unwrap(wrapper));
        return "redirect:/welcome";
    }
}

テスト

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations={"file:src/main/webapp/WEB-INF/spring-servlet.xml"})
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class})
public class ControllerTest {

@InjectMocks
private SpringController controller;

@Mock
private Wrapper wrapper;   

@Mock
private BindingResult result;

@Before
public void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);
    mockMvc = standaloneSetup(controller)
            .setSingleView(mockView)
            .build();
}

    @Test
    public void testCreateBad() throws Exception {
        when(result.hasErrors()).thenReturn(true);

        mockMvc.perform(post("/create", wrapper, result))
                .andExpect(status().isOk())
                .andExpect(view().name("add"));
    }

}
4

1 に答える 1

2

問題は、post()メソッドを正しく使用していないことです。こちらの javadoc を参照してください

渡す引数で

post("/create", wrapper, result)

wrapperresultメソッドのメソッド引数としてではなく、url 変数として使用されますcreate。このように嘲笑することはできませんBindingResult。実際、それを嘲笑するのは非常に難しく、おそらく長期的には価値がありません。何かあれば、有効か無効かのコマンドオブジェクトでテストする必要があります。

于 2013-09-24T15:07:30.260 に答える