2016-11-14 6 views
0

オブジェクトのJSON配列の反復をテストするアサーションを作成しようとしています。複数のキー/値ペアのアサーション

それぞれのキー値を返し、アプリケーションの別の場所で使用したいと考えています。例えば

私はその後、IDキーを確認するには、次のテストを使用することができます
@Before 
public void setUp() { 
    jsonStringSingleObject = "[{\"id\": 1, \"name\": \"A green door\", \"price\": \"12.50\"}]"; 

    jsonStringMultipleObjects = "[{\"id\": 1, \"name\": \"A green door\", \"price\": \"12.50\"}, " 
      + "{\"id\": 7, \"name\": \"Tesla\", \"price\": \"94.71\"}]"; 
} 

: 私は(最大100反復するデータの何百万を持っていないとして、私は古き良き方法を使用して反復しています最大)。

@Test 
public String idExtractor_checksSingleIDValueWhenPassedAnArrayWithIDKey() 
    throws JSONException { 

    JSONArray json = new JSONArray(jsonStringSingle); 
    for (int i = 0; i < json.length(); i++) { 
     JSONObject objects = json.getJSONObject(i); 
     String id = objects.getString("id"); 
     assertTrue(id.equals("1")); 
     System.out.println(id); 
    } 
} 

試験は、私が通過する際jsonStringMultipleObjectは、 テストは失敗し、しかし、単一のオブジェクトに渡します。 私は

assertThat(id, anyOf(containsString("1"), containsString("2"))); 

を使用してテストに合格するために管理しかし、これは根本的な問題を解決しません。 私は、オブジェクトごとにIDをチェックし、それを返すしたいと思います -

AssertTrue(id.equals("1")); ///test passes 

のようなものは、次に第二の目的にPASSED

AssertTrue(id.equals("2")); ///test passes 

テストをチェック!

最初のアサーションが失敗した場合は、テスト全体が失敗する必要があります。 これは可能でしょうか?

+0

最初のアサーションが失敗した場合、またはアサーションが失敗した場合のみですか? – Seth

+0

@Seth 2番目のオブジェクトのためにアサーションが失敗します。 –

+0

@ NicolasFilotto 7または1のために失敗しません。2番目のオブジェクトは1である必要はありません。オブジェクトを比較していません。私はちょうど私がそれが期待するものであることを確かめるためにそれらを個別にチェックし、それらを返すようにしたい –

答えて

0

JSONArrayに直接文字列を使用することに関連する問題がありますか?この質問/回答を参照してください:Convert string to JSON array

関連する問題