0

したがって、springmvc コントローラーをテストするために、Spring の Mockmvc についてここに多くの質問があるとは思いませんが、Spring チュートリアル https://spring.io/guides/tutorials/rest/2/を読みまし た。そこにありましたが、単一の id パラメータを使用して Web サービスで単純な GET を実行しようとしていました。コントローラーは次のようになりました。

@RestController
@RequestMapping("/demandrest")
public class DemandServicesController {

    @Autowired
    DemandService demandService;


    @RequestMapping(value = "/demand/{$id}", method = RequestMethod.GET, headers= "Accept-application/jsson")
    public Demand readDemand(@RequestParam(value="id", required=true) String id){
        return demandService.readDemand(new Long(id));
    }

そして、org.springframework.test.web.servlet.MockMvc を使用する単体テストを作成し、サービス呼び出しをモックアウト (実際にはスタブ) しようとして、ステータス コードでアサートを実行し、ステータス コード 404 を取得しています。私のテストこのように見えます

import static org.mockito.Mockito.when;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
import static org.springframework.test.web.servlet.setup.MockMvcBuilders.standaloneSetup;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.test.web.servlet.MockMvc;

public class DemandServicesControllerTest {

    MockMvc mockMvc;

    @InjectMocks
    DemandServicesController demandServicesController = new DemandServicesController();

    @Mock
    DemandService demandService;

    @Before
    public void setUpUnitTest() throws Exception {
        MockitoAnnotations.initMocks(this);
        this.mockMvc = standaloneSetup(demandServicesController).
                setMessageConverters(new MappingJackson2HttpMessageConverter()).build();
    }

    @After
    public void tearDown() throws Exception {
    }

    @Test
    public void testReadDemandState() throws Exception {
        Long id = new Long(99);
    Demand demand = new Demand();
        demand.setDescription("description");
        when(demandService.readDemand(id)).thenReturn(demand );
        this.mockMvc.perform(get("/demandrest/demand/{id}",id.toString()).
                accept(MediaType.APPLICATION_JSON)).andExpect(status().isOk());
    }

}

投稿する前に、他にもいくつか言及します。したがって、チュートリアルの例を見て、私が使用するものだけを選択しようとしたので、正確なコピーではありません. 私がしなければならなかった大きな違いの 1 つは、pom でテスト プラグインがどのように構成されているかに関係していると思われます。例がインスタンスを作成するのに十分なほどスマートなコントローラーをインスタンス化する必要がありました。また、この例では、プロジェクトのセットアップを Gradle に依存しており、このプロジェクトには pom ファイルしかありません。それが違いを生むかどうかはわかりません。これは新しいもののようですが、これは非常に単純な例です。助けてくれてありがとう。

4

1 に答える 1

0

RequestMapping を修正する必要があります

@RequestMapping(value = "/demand/{$id}", method = RequestMethod.GET, headers= "Accept-application/jsson")

@RequestMapping(value = "/demand/{id}", method = RequestMethod.GET, headers= "Accept=application/json")

{$id}{id} であるheaders必要があり、タイプミスと構文の誤りがあります。おそらく、 paramの代わりにproducesandを使用することも検討する必要があります。consumesheaders

これにより、404 ステータスが修正されます。

于 2014-08-11T18:03:36.813 に答える