Kotlin测试用例中对象的迭代列表

qxgroojn  于 2022-12-13  发布在  Kotlin
关注(0)|答案(1)|浏览(151)

我正在使用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()
  }

上面我可以检查first()元素的hasFieldOrPropertyWithValue,因为hasSize(3),我需要在相同的TestCase方法中检查List of Objects的所有3个值。
对象列表如下

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)来检查使用多个测试用例的对象列表。

已更新

库”org.assertj.core.api.Assertions并支持java8

sr4lhrrt

sr4lhrrt1#

假设您使用的是方法名称中的AssertJ,并且您拥有支持Java-8的版本(即3.5+),则可以找到allSatisfy方法:
验证所有元素是否满足表示为Consumer的给定要求。
这对于在元素上执行一组Assert很有用。
从文档中,应该可以执行以下操作

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

您还可以查看Kotlin特定的库(特别是在需要编译到JVM 6的情况下)。

相关问题