0

Apache Wink 1.2.1 を使用しています。REST サービスの単体テストを行いたいのですが、RestClientを使用せずに実行したいと考えています。例は見つかりませんでしたが、多くの検索を行った後、MockServletInvocationTestが正しい出発点であると推測しました...しかし、私はそれを機能させることができませんでした。

これは私にとって失敗する最小限の例です。

私の REST サービス:

@Path("greetings")
public class GreetingsResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return "Hello World!";
    }

}

対応する単体テスト:

public class GreetingsResourceTest extends MockServletInvocationTest {

    @Override
    protected Class<?>[] getClasses() {
        return new Class<?>[] { GreetingsResource.class };
    }


    public void testHello() throws ServletException, IOException {
        MockHttpServletRequest request = MockRequestConstructor.
            constructMockRequest("GET", "/greetings", MediaType.TEXT_PLAIN);
        MockHttpServletResponse response = invoke(request);
        assertEquals(200, response.getStatus());
    }

}

それで、私はいくつかの質問があります:

  1. 私は間違った方向に進んでいますか?

  2. 正しい方向に進んでいる場合、何が間違っているのでしょうか? 前のテスト ケースを実行すると、次のエラーが表示されます (これはよくわかりません)。

java.lang.NoSuchMethodError: javax/servlet/http/HttpServletResponse.getContentType()Ljava/lang/String; org.apache.wink.server.internal.handlers.FlushResultHandler$FlushHeadersOutputStream.flushHeaders(FlushResultHandler.java:350) で ~[wink-server-1.2.1-incubating.jar:1.2.1-incubating]

4

1 に答える 1

3

私の問題が何であるかを見つけました。誰かが同じ問題を抱えていた場合に備えて、ここにメモを残します.

これが私が得た理由ですNoSuchMethodError

  • Apache Mavenを使用して依存関係を処理します
  • 使用するMockHttpServletRequestMockHttpServletResponseは、spring-mock 2.0.8 への依存関係を含めました。

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-mock</artifactId>
      <version>2.0.8</version>
      <scope>test</scope>
    </dependency>
    
  • 残念ながら、spring-mock 2.0.8 には commons-logging 1.1 への依存関係があり、それjavax/servlet/http/HttpServletResponse.getContentType()Ljava/lang/Stringは、存在しない servlet-api 2.3 への依存関係を持っています! そのメソッドは servlet-api 2.4 以降に存在します

したがって、私の問題を解決するために、スコープ テストを使用して servlet-api 2.4 に明示的な依存関係を追加しました。これで、単体テストは問題なく動作します!

于 2013-03-06T16:57:25.920 に答える