在Kotlin TestCase中迭代对象列表

时间:2019-03-15 12:19:16

标签: unit-testing kotlin

我正在使用Kotlin进行单元测试,并且无法迭代测试用例中的对象列表,请检查下面的代码,

@Test
  @WithMockOAuth(siteId = "5698965", subPermissions = [SubPermission.GETD])
  fun `get fee zero`() {

    val body = """
      {
      "newMessage": {
        "call": true,
        "callMessatgeCount": 3,
        "discounted": 2,
        "NewFees": 4.99,
        "Id" : "extra SIM Business"
      }
    }
      """.trimIndent()

    this.server.expect(requestTo("${integrationClientProperties.url}/main/0767777777/register/"))
      .andRespond(withSuccess(body, MediaType.APPLICATION_JSON_UTF8))

    assertThat(service.getValues("0767777777"))
      .hasSize(3)
      .first()
      .hasFieldOrPropertyWithValue("callMessatgeCount", 3)
      .hasFieldOrPropertyWithValue("NewFees", BigDecimal.ZERO)

    this.server.verify()
  }

以上,我可以检查hasFieldOrPropertyWithValue中的first()元素,作为hasSize(3),我需要检查同一{{1 }}方法。

对象列表如下

List of Objects

注意:我尝试TestCase使用多个测试用例检查对象列表。

已更新
库” ListValue:[ { "newMessage": { "call": true, "callMessatgeCount": 3, "discounted": 2, "NewFees": 4.99, "Id" : "extra SIM Business" }, { "newMessage": { "call": true, "callMessatgeCount": 3, "discounted": 2, "NewFees": 0, "Id" : "extra SIM Business" }, { "newMessage": { "call": true, "callMessatgeCount": 3, "discounted": 2, "NewFees": 4.99, "Id" : "extra SIM Business" } ] ,并支持element(index)

1 个答案:

答案 0 :(得分:0)

假设您正在使用方法名称中的AssertJ,并且具有Java-8支持的版本(即3.5+),则可以找到allSatisfy method

  

验证所有元素均满足以消费者表示的给定要求。

     

这对于在元素上执行一组断言很有​​用。

在文档中,类似以下内容的方法应该可以使用

assertThat(service.getValues("0767777777"))
  .hasSize(3)
  .allMatch { assertThat(it)
      .hasFieldOrPropertyWithValue("callMessatgeCount", 3)
      .hasFieldOrPropertyWithValue("NewFees", BigDecimal.ZERO)
  }

您还可以研究Kotlin特定的库(尤其是如果您需要编译到JVM 6)。