3

Spring の「spring-test-mvc」ライブラリを使用して Web コントローラーをテストしています。JSON配列を返す非常に単純なコントローラーがあります。それから私のテストで私は持っています:

@Test
public void shouldGetAllUsersAsJson() throws Exception {
    mockMvc.perform(get("/v1/users").accept(MediaType.APPLICATION_JSON))
            .andExpect(content().mimeType(MediaType.APPLICATION_JSON))
            .andExpect(jsonPath("fName").exists());
}

上記のテストは以下を返します。

java.lang.AssertionError: No value for JSON path: fName

実際に何が得られるかをすばやく確認するために、以下のテストを実行しました。

@Test
public void shouldPrintResults() throws Exception {
    mockMvc.perform(get("/v1/users").accept(MediaType.APPLICATION_JSON))
            .andDo(print());
}

そして、それはの本体で正しいJSON配列を返しますMockHttpServletResponse

JSON配列でjsonPath表示できない理由がわかりません。fName

4

2 に答える 2

10

json パスの依存関係を maven に追加するか、jar を lib に追加すると、機能します。Spring は、最新の Spring 3.2.0 RC1 リリースに jsonPath 依存関係を含めていないと思います。これは、Spring-Test-MVC スタンドアロン プロジェクトでも同じだと思います。

Maven の依存関係は次のとおりです。

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>0.8.1</version>
    <scope>test</scope>
</dependency>

jsonPath("$.test").value("test") を使用するには、hamcrest ライブラリが必要になる場合もあります。

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-library</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>
于 2012-11-13T15:57:59.210 に答える
10

あなたのjsonレスポンスボディはどのように見えますか? あなたはそれを見ることができます.andDo(print())

試してみてくださいjsonPath("$.fName")

これは、json 応答が次のようになっていることを前提としています。 {"fName":"first name"}

応答が配列の場合、次jsonPath("$[0].fName")のような応答が必要です。 [{"fName":"first name"},{"fName":"first name #2"}]

http://goessner.net/articles/JsonPath/で他の例を見ることができます。

于 2012-11-13T21:52:31.370 に答える