多个键/值对的断言

时间:2016-11-14 08:22:39

标签: java tdd junit4

我正在尝试编写断言来测试JSON对象数组的迭代。

我想返回每个键值并在我的应用程序的其他地方使用它。

例如:

@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\"}]";
}

然后我可以使用以下测试来检查id键: 我正在使用旧的方法进行迭代,因为我没有数百万的数据要迭代(最多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

然后检查第二个对象

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

通过测试!

如果第一个断言失败,我需要整个测试失败。 这有可能吗?

1 个答案:

答案 0 :(得分:0)

您的问题可能与直接使用字符串构造与JSONArray有关吗?看到这个问题/答案:Convert string to JSON array