2017-05-30 93 views
0

這是我第一次嘗試編寫JUnit測試。在我的情況下,我需要使用我預期的JSON字符串驗證來自API的JSON響應。我的部分代碼如下所示:如何斷言兩個JsonObject實例

@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

感謝您的回覆。我使用參數化來運行我的測試與數據提供者。這就是說預期的價值將根據數據提供者而改變。所以,我不能總是這樣做'expected.addProperty(「b」,1);' –

+0

你的數據提供者可以提供整個JsonObject。 –

1

您可以使用JsonUnit庫。

它可以斷言的方式你看:

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

但它也支持比較兩個對象代表內部JSON元素:

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

框架有兩種JacksonGson和支持支持Hamcrest匹配器。