0

コントローラのテストを作成しようとしています。これが私が似ているものです。名前が変わるだけです。MockitoとSpringMVCを使用しています。テスト構成ファイルには、モックファクトリを介してモックされた自動配線されたBeanが含まれています。ヌルポインタを取得します...

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={
        ...
 })
public class MyReportControllerTest {

private MockHttpServletRequest request;
private MockHttpServletResponse response;
private MockHttpSession session;
private HandlerAdapter handlerAdapter;

@Autowired
private ApplicationContext applicationContext;

@Autowired
private MyService myService;

@Autowired
private RequestMappingHandlerMapping rmhm;

@Before
public void setUp() throws Exception {
    request = new MockHttpServletRequest();
    response = new MockHttpServletResponse();
    session = new MockHttpSession();
    handlerAdapter = applicationContext
            .getBean(RequestMappingHandlerAdapter.class);

    request.setSession(session);
    request.addHeader("authToken", "aa");

    Mockito.when(
            myService.getMyInfo(YEAR))
            .thenReturn(getMyInfoList());
}
@Test
public void testGetMyInfo(){
    request.setRequestURI("/getMyInfo/" + 2011);
    request.setMethod("GET");

    try {
        if( handlerAdapter == null){
            System.out.println("Handler Adapter is null!");
        }
        if( request == null){
            System.out.println("Request is null!");
        }
        if( response == null){
            System.out.println("Response is null!");
        }
        if( rmhm.getHandler(request) == null){
            System.out.println("rmhm.getHandler(request) is null!");
        }
        //the above returns null
        System.out.println("RMHM: " + rmhm.toString());
        System.out.println("RMHM Default Handler: " + rmhm.getDefaultHandler());
        handlerAdapter.handle(request, response, 
                rmhm.getHandler(request)
                .getHandler());//null pointer exception here <---

        ...


    } catch (Exception e) {
        e.printStackTrace();
        fail("getMyReport failed. Exception");
    }

}

public List<MyInfo> getMyInfoList(){...}

徹底的なデバッグを行ったところ、モックリクエストのハンドラーがnullのままであることがわかりました。ハンドラーに変換されない、またはデフォルトのハンドラーに移動しないという点で何が欠けていますか?

4

1 に答える 1

0

ここには多くの問題があります。

まず、コントローラーの単体テストまたは統合テストを試みていますか? 確かに統合テストのように見えます。Spring@Autowiredアノテーションと@ContextConfiguration.

しかし、そうであれば、なぜにモック動作を定義しようとしているのmyServiceですか? それは決してうまくいきません.Springは「本物の」インスタンスを注入し、Mockitoはその魔法を働かせる望みはありません.

関連している; それを機能させたい場合に必要な、あらゆる種類のモック初期化呼び出しがありません。

最後に、テストの名前で判断するときに、なぜこのすべての配線 (HandlerMappings、HandlerAdapters など) を行っているのMyReportControllerですか? 必要に応じて、モックリクエスト、レスポンスなどで必要な「エンドポイント」メソッドを単純に呼び出すことはできませんか?

于 2012-10-22T06:19:08.427 に答える