Я пытаюсь написать несколько юнит-тестов для своих родных мобильных приложений, но столкнулся с препятствиями в моих тестах Android. В частности, я изо всех сил пытаюсь найти пример Котлинской версии «Ожидания / обещания Свифта».
Я нашел примеры Kotlin Promises, но они кажутся намного сложнее, чем нужно ...
Например, вот тест для функции входа в API в моем проекте iOS:
func testLogin() {
/// Prepare for login
if CURRENT_USER != nil {
logout()
}
/// Login
let promise = expectation(description: "User is logged in.")
// 1. Given
var isSuccess: Bool = false
// 2. When
User.login(username: maleUsername, password: malePassword, success: {
isSuccess = true
promise.fulfill()
}) { (_, agreeToTerms) in
XCTFail()
}
wait(for: [promise], timeout: maxTimeOut)
// 3. Then
XCTAssertNotNil(CURRENT_USER)
XCTAssertTrue(isSuccess)
/// Logout
logout()
}
Это довольно просто для меня. У меня есть асинхронный метод login
, который имеет два возможных блока завершения: success
и failure
; и мне нужно дождаться завершения одного из них, прежде чем оценивать. Для этого я создаю обещание перед вызовом, затем я выполняю обещание в двух блоках завершения, и я ожидаю ожидания выполнения до опровергаю мои утверждения.
Сейчас в Котлине у меня похожий тест:
private val loginFragment = LoginFragment()
@Test
fun loginTest() {
val username = ""
val password = ""
// TODO: Create Promise
loginFragment.loginViewModel
.login(username, password)
.observe(loginFragment, Observer {
loginFragment.activity?.onResult(it?.result,
onSuccess = {
// TODO: Fill Promise
},
onValidationError = {
// TODO: Fail Test
})
})
// TODO: Assertions
}
Но я не могу найти эквивалент обещаний Свифта ..
Существует ли в Котлине? Если нет, то как мне реализовать версию моего метода Swift testLogin
в Kotlin?