2011-10-20 10 views
4

junitでアプリケーションをテストしようとしています。Spring 3.0 junit test DispatcherServlet

そこで私は、セットアップ以下のクラスました:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = "/META-INF/spring/applicationContext-test.xml") 
@TransactionConfiguration 
@Transactional 
public class DispatcherServletTest extends AbstractJUnit4SpringContextTests { 

    private MockHttpServletRequest request; 
    private MockHttpServletResponse response; 

    private DispatcherServlet dispatcher; 

    @Before 
    public void setUp() throws Exception { 
      request = new MockHttpServletRequest(); 
      response = new MockHttpServletResponse(); 

      MockServletConfig config = new MockServletConfig("myapp"); 
      config.addInitParameter("contextConfigLocation","classpath*:webmvc-config.xml"); 

      dispatcher = new DispatcherServlet(); 
      dispatcher.init(config); 
    } 
    //test cases 

}

をだから、問題は、私のディスパッチャサーブレットが私のコントローラのいずれかにすべての要求を送信できないようだということ、です。

私は設定 - contextConfigurationLocationに何かがあると思います。 それはロガーが言う

を、彼はファイルを見つけることができますように(それ以外の場合は、例外をスローします)に見えませんが、どのような構成をロードしない:

org.springframework.web.servlet.PageNotFound - 見つかりませマッピングURIを持つHTTPリクエストの[にhttp:// localhost:8080/myappに/ ABC]

しかし、私は間違って何絶対にないアイデアを持っていない...

私は任意の助けをいただければ幸いです!

+1

本当にディスパッチャーサーブレットをテストしたいのですが、Webコントローラーのハンドラーメソッドを「のみ」テストしてみませんか? – Ralph

+0

junitを使ってhttpリクエストをテストできないと思います。サービスのみ。 – jaleel

+0

いいえ正しいコントローラメソッドが呼び出された場合、アプリケーション全体の意味を実際にテストします。 例: /myposturlにバックエンドに何らかのデータを含むPOSTを送信し、この呼び出しの原因となったメソッドの正しいコントローラが "応答中"であるかどうかを確認したい だから私は、ディスパッチャサーブレットに要求し、コントローラは直接要求しない。 私のコントローラには、このリクエストを処理するメソッドしかありません。 RequestMapping(method = RequestMethod.POST、headers = "Accept = ...") public ResponseEntity createFromJsonArray(@RequestBody String json){... – Alexander

答えて

1

鉱山が正常に動作している、事前に

おかげで、以下の調整をしてみてください。

  1. あなたはJunit4あなたがクラスをテスト拡張する必要を使用していないしている場合は、JUnitのランナーは
  2. は、クラスパスを経由して、コンテキスト設定をロードし、確認テストクラスパス

    からアクセス可能であることを確認トリックを行う必要があります

    @ContextConfiguration(locations = {"classpath:applicationContext-test.xml"})

  3. 注釈付きコントローラをテストするだけです。

 

    @Test 
    @Transactional 
    public void testAnnotatedListUser() throws Exception { 
     MockHttpServletRequest request = new MockHttpServletRequest(); 
     MockHttpServletResponse response = new MockHttpServletResponse(); 
     AnnotationMethodHandlerAdapter handlerAdpt = new AnnotationMethodHandlerAdapter(); 
     request.setRequestURI("/you/URIhere"); 
     ModelAndView mav = handlerAdpt.handle(request, response, this.controller); 
     assertEquals("Incorrect view name returned", "myexpectedviewname", mav.getViewName()); 
    } 

0

私の質問にはいくつかの問題点があります:

が最初で、AbstractJUnit4SpringContextTestsを拡張し、@RunWith(...)を使用することはできません、なぜなら私はこのようにそれを行いますそれは同じだ。二、あなたがdispatcherServlertを使うべきではありませんが、あなたにハンドラを定義することによって、ハンドラはapplication.xmlおよび@Autowireプライベートハンドラハンドラを介してテストケースでそれをオートワイヤリングで

...

その後、すべてが動作するはずです元気?

関連する問題