3

次のRESTコントローラーがあります

@Controller
@RequestMapping("/rest/transceptors")
public class TransceptorRestController
{
    @Autowired
    private TransceptorDao transceptorDao;  

    @RequestMapping(value="/get/{idTransceptor}", method=RequestMethod.GET)
    public @ResponseBody Transceptor getOne(@PathVariable("idTransceptor") Long idTransceptor)
    {
        return transceptorDao.searchByIdTransceptor(idTransceptor);
    }
}

このコントローラーは JBoss での実行時に正しく機能し、結果は期待どおりです。私は Postman (Google Chrome の REST テスト拡張機能) を使用しており、XML と JSON で正しい結果を得ることができます。

しかし、それをテストするために MockMVC を使用すると問題が発生します。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
locations={
    "classpath:test-servlet-context.xml"
})
@WebAppConfiguration
public class TransceptorRestControllerTest {

@Autowired
private WebApplicationContext wac;

private MockMvc mockMvc;

@Before
public void setup() 
{
    mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}

@Test
public void testRoot() throws Exception 
{
    mockMvc.perform(get("/")).
    andExpect(status().isOk()); 
}

@Test
public void testGet() throws Exception
{
    mockMvc.perform(get("/rest/transceptors/get/1"))
    .andExpect(status().isOk())
    .andDo(print())
    .andExpect(model().attribute("name", equals("Test_Name_1")));
}

TestRoot テストは問題なく動作します。しかし、andExpect(model()... を使用しようとすると、「ModelAndView が見つかりません」というメッセージが表示されます。

XML または JSON の特定の期待のために model() 部分を置き換えると、XML および JSON 文字列は常に空を返します。

私はこれを理解しようと何日も費やしてきましたが、私は Java の初心者であり、Spring の初心者です。それを修正するためにどこを見ればよいか教えてもらえますか?

追加情報として、ログメッセージを(sfj4lで)どこにでも置いていましたが、Junitで実行すると、DAOのログメッセージは機能し、テストモジュール自体のログメッセージは機能しますが、RESTコントローラー内のログメッセージは表示されません.

GET 関数が一致するようなものですが、関数の内容は実行されず、空の応答が返されます。それにもかかわらず、私の isOk() への呼び出しは成功しています。

4

2 に答える 2

0

「ModelAndViewが見つかりません」は正しいです。@ResponseBody を使用すると、返された値がレスポンスの本文に直接書き込まれます。モデルなし、ビュー解像度なしなど。

より一般的には、クライアントの観点から要求の結果をテストすることに集中するのが理想的です。これには、応答ヘッダー、本文、および応答ステータスが含まれます。モデル属性など、通常はクライアントに表示されないその他の結果を控えめにテストします。

于 2013-03-28T13:15:37.513 に答える