Как смоделировать класс, который имеет много параметров конструктора в mockito? - PullRequest
0 голосов
/ 07 апреля 2020

Допустим, у меня есть этот класс A:

class A(a: Int, b: String, c: Long, d: Double, ...)

Теперь, если я хочу протестировать метод, который возвращает список объектов A:

fun test_getListOfObjectsA(){
    val expected = listOf(A(), A(), A())
    whenever(someClass.getListOfObjectsA()).thenReturn(listOf(A(), A(), A()))

    val actual = someClass.getListOfObjectsA()

    assertEquals(expected, actual)
}

Вот проблема, этот код не будет компилироваться, потому что каждый экземпляр A () требует, чтобы был передан список аргументов. Как я могу создать список A без необходимости каждый раз передавать все аргументы конструктора?

1 Ответ

3 голосов
/ 07 апреля 2020

Чтобы высмеять класс A, вы можете использовать mock<A>().

Как сказано в комментариях, ваш тест не проверяет getListOfObjectsA(), он проверяет Mockito насмешливое поведение.

Кстати, следующий тест проходит:

fun test_getListOfObjectsA(){
    val expected = listOf(mock<A>(), mock<A>(), mock<A>())
    whenever(someClass.getListOfObjectsA()).thenReturn(expected)

    val actual = someClass.getListOfObjectsA()

    assertEquals(expected, actual)
}

Важное примечание

Помните, что, поскольку ваш класс final, успешно макет, у вас есть 3 варианта:

  1. сделать его open
  2. использовать зависимость mockito-inline, чтобы разрешить насмешку над конечными классами
  3. использовать Kotlin all-open плагин компилятора для создания класса и его полей open в тестах (https://kotlinlang.org/docs/reference/compiler-plugins.html)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...