2017-05-30 13 views
0

JUnitテストを初めて作成しようとしています。私の場合は、期待されるJSON文字列でAPIからJSON応答を検証する必要があります。私のコードの一部は次のようになります。JsonObjectの2つのインスタンスをアサートする方法

@Test 
public void test() 
{ 
    String expected = "{\"b\":1}"; 
    HttpClient client = HttpClientBuilder.create().build(); 

    HttpPost request = new HttpPost("http://10.0.0.10/e/p"); 
    StringEntity params = new StringEntity("{\"a\":1}"); 

    request.addHeader("Content-Type", "application/json"); 
    request.setEntity(params); 

    HttpResponse response = client.execute(request); 
    HttpEntity entity = response.getEntity(); 

    response.getStatusLine().getStatusCode(); 

    JsonObject actual = readResponse(entity); 
} 

ここで、私の期待値が文字列であることがわかります。しかし、JsonObjectとして取得している実際の値です。私は両方をjsonの文字列にして、jsonとしてそれらをアサートするか、または私の実際の値をJsonObjectに変換する必要があります。私は両方の方法を検索しましたが、どのように把握できませんでした。どのように私の場合に最良の修正がありますか?

+0

'JsonObject'クラス(パッケージを含む)の完全な名前を教えてください。 –

+0

com.google.gson.JsonObject –

答えて

1

あなたが期待JsonObjectを構築し、assertEqualsを使用してそれを比較することができます。

JsonObject expected = new JsonObject(); 
expected.addProperty("b", 1); 

assertEquals(expected, actual); 
+0

お返事ありがとうございます。 Parameterizedを使用してデータプロバイダでテストを実行しています。期待される価値は、データ提供者に基づいて変化すると言われています。だから、私はいつも 'expected.addProperty(" b "、1);' –

+0

のようにすることはできません。データプロバイダはJsonObject全体を提供することができます。 –

1

JsonUnitライブラリを使用できます。

それはあなたが見る方法で表明することができます:

JsonObject actual = readResponse(entity) 
// objects are automatically serialized before comparison 
assertJsonEquals("{\"b\":1}", actual); 

それはまた、内部JSON要素を表す2つのオブジェクトを比較するサポートしています。

JsonObject actual = new JsonObject(); 
actual.addProperty("test", 1); 
JsonObject expected = new JsonObject(); 
expected.addProperty("test", 1); 
assertJsonEquals(expected, actual); 

FrameworkはJacksonGsonの両方をサポートしており、 Hamcrest matchersのサポート

関連する問題