Повторение списка объектов в Kotlin TestCase

#unit-testing #kotlin

#модульное тестирование #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) мне нужно проверить все 3 значения, которые есть 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) проверить список объектов, используя несколько тестовых примеров.

Обновлено
Библиотека » org.assertj.core.api.Assertions и поддерживает java8

Комментарии:

1. На будущее: укажите, какие библиотеки вы используете!

2. как вы сказали, я использую AssertJ, поддерживающий java8, и я решил эту проблему с помощью tuple. Спасибо

Ответ №1:

Предполагая, что вы используете AssertJ из названий методов и что у вас версия, поддерживающая Java-8 (т. Е. 3.5 ), вы можете найти allSatisfy метод:

Проверяет, что все элементы удовлетворяют заданным требованиям, выраженным потребителем.

Это полезно для выполнения группы утверждений над элементами.

Из документов должно работать что-то вроде следующего

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

Вы также могли бы изучить библиотеки, специфичные для Kotlin (особенно если вам нужно скомпилировать в JVM 6).