#android #unit-testing #kotlin #junit
Вопрос:
Я работаю с Kotlin (для Android), а также с JUnit и Koin.
У меня есть интерфейс для использования, который выглядит так:
interface MyInterface {
fun vehicle(id: String, block: VehicleInterface.() -> Unit)
}
interface VehicleInterface {
fun requestVersion()
}
Код, вызывающий этот метод, выглядит следующим образом:
import com.domain.protocol.thelibrary.sdk.MyInterface
// The below is injected via Koin
class SomeClass(private val myInterface: MyInterface) {
fun functionIWantToUnitTest(id: String) {
myInterface.vehicle(id) {
requestVersion()
}
}
}
Я хотел бы провести модульный тест, чтобы, когда я звоню functionIWantToUnitTest
и передаю идентификатор «1», мой интерфейс.транспортное средство вызывается с идентификатором «1», и я также хотел бы убедиться, что затем вызывается запрос.
Я написал модульный тест как таковой:
@Test
fun `Ensure functionIWantToUnitTest calls requestVersion with the correct id`() {
every { myInterface.vehicle("1", any()) } returns Unit
someClass.functionIWantToUnitTest("1")
verifySequence {
myInterface.vehicle("1") {
requestVersion()
}
}
}
Это не удается как таковое:
java.lang.AssertionError: Verification failed: call 1 of 1:
MyInterface(myInterface#1).vehicle(eq(1), eq(lambda {}))). Only one matching call to
MyInterface(myInterface#1)/vehicle(String, Function1) happened, but arguments are not
matching:
[0]: argument: 1, matcher: eq(1), result:
[1]: argument: lambda {}, matcher: eq(lambda {}), result: -
Кто-нибудь может, пожалуйста, помочь мне понять, что я делаю не так…
Любая помощь с благодарностью принимается.