В моем проекте Android я использую mockito для проверки функции, которая преобразует QuerySnapshot
в List<Entry>
.
Это функция, которую я пытаюсь протестировать:
class EntriesMapper {
fun map(querySnapshot: QuerySnapshot): List<Entry> {
return querySnapshot.map { documentSnapshot ->
Entry(documentSnapshot["id"] as String)
}
}
}
Это класс теста:
class EntriesMapperTest {
@Test
fun `map should convert query snapshot to entry`() {
val id = 1
val documentSnapshot = mock<DocumentSnapshot> {
on { this.id } doReturn id
}
val querySnapshot = mock<QuerySnapshot>()
val transform = any<(DocumentSnapshot) -> Entry>()
whenever(querySnapshot.map(transform)).thenAnswer { answer ->
(answer.arguments.first() as (DocumentSnapshot) -> Entry).invoke(documentSnapshot)
}
val testObject = EntriesMapper()
val entries = testObject.map(querySnapshot)
val entry = entries.first()
assertThat(entry.id, equalTo(id))
}
}
И это исключение:
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Invalid use of argument matchers!
0 matchers expected, 1 recorded:
-> at io.company.myapp.entries.EntriesMapperTest.map should convert query snapshot to entry(EntriesMapperTest.kt:147)
This exception may occur if matchers are combined with raw values:
//incorrect:
someMethod(anyObject(), "raw String");
When using matchers, all arguments have to be provided by matchers.
For example:
//correct:
someMethod(anyObject(), eq("String by matcher"));
Я знаю, что это очень распространенное исключение, которое вы получаете, когда комбинируете сопоставления с необработанными значениями, но, как вы можете видеть, я не передаю необработанные значения.