1

junit、mockito、mockMVC を使用して、webapp の動作をテストしています。インジェクションが理解できない依存関係に苦しんでいます。私のwebapp構造は次のとおりです。

Class Controller{

    @Autowired Service searchService;

    @RequestMapping("Search")
    public returnType search(@RequestParam("parameter")String parameter){
        searchService.doSearch(parameter);
    }        
}

そしてサービスクラス

Class Service{
    @Autowired Service2 service2;

    public returnType doSearch(String parameter){
        //some code
        service2.call(parameter);
    }
}

このコントローラーの検索メソッドをテストする必要がありますが、service2 は現在稼働していないため、その呼び出しをモックする必要があります。service2 をモックできますが、コントローラーの mockMVC インスタンスに service2 のモックを挿入する方法がわかりません。私の知る限り、mockito の @InjectMocks は、モックを 2 レベルではなく 1 レベルだけ注入します。

編集:

以下を使用して、コントローラーの MockMVC インスタンスを取得しています

MockMvc controller;
controller = MockMvcBuilders.standaloneSetup(Controller);
4

2 に答える 2

0

あなたはそれを必要としません。

何をする必要があるかを把握するため、嘲笑search serviceするだけで十分です。

例:

doReturn(...).when(searchService).doSearch(any());

単体テストの実行中、開発者はテスト対象のシステムを特定し、すべての共同作業者をモック/スタブ化する必要があります。

したがって、この場合は、Controller と Search Service の個別の単体テストを作成します。

また、 Martin Fowler によるこのすばらしい記事 - Mocks Arent Stubsもお読みください。

于 2016-03-07T07:58:44.300 に答える