0

コントローラーに次のコードがあります。

@Controller
@RequestMapping(value="/my")
public class MyController  {

    @RequestMapping(value="/zone/{id}", method=RequestMethod.POST)
    public ModelAndView zone(@PathVariable Long id, @Valid MyFormBean formBean){

    System.out.println(formBean.getId());
    ModelMap mod = new ModelMap();
    mod.put("test", true);
    return new ModelAndView(myViewName, model);
    }
}

そして、私の MyControllerTest クラスの次のコード

public class MyControllerTest {
  @InjectMocks
  private MyController myController = new MyController();

  private MockMvc mockMvc = MockMvcBuilders.standaloneSetup(MyController).build();

  @Before
  public void setUp() {
    MockitoAnnotations.initMocks(this);
  }

  @Test
  public void myTest() {
     MyFormBean formBean = new MyFormBean();
     formBean.setId(5L);
     ModelAndView mav = new ModelAndView();

     int id = 10;

     try {
       MvcResult mvcResult = mockMvc.perform(MockMvcRequestBuilders.post("/my/zone/" + id).param("formData", formData.toString())).andReturn();
     } catch(Exception e) {
       fail(e.getMessage());
     }
}

MyFormBean の id フィールドに @NotNull アノテーションが付けられている

そのため、これのさまざまな順列(paramの代わりにrequestAttr、sessionAttrなど、その他いくつか)を試しましたが、機能しません。せいぜい @Valid 句で例外が発生する程度です。それ以外の場合は、実際にメソッドに入らずにテストに合格します。

いくつかの例に従おうとしましたが、特定のメソッド署名で何も見つかりません。

助けていただければ幸いです。

4

1 に答える 1

0

問題はテストにはありません。問題はメイン コード (コントローラー) にあります。URL パスは で注釈が付けられたパラメーターにのみマップさ@PathVariableれ、フォーム オブジェクトにはマップされないためです。

于 2014-07-14T13:51:49.267 に答える