【发布时间】:2019-04-16 21:06:08
【问题描述】:
我正在尝试为我的原生移动应用程序编写一些 UnitTest,但在我的 Android 测试中遇到了障碍。具体来说,我正在努力寻找 Kotlin 版本的 Swift 期望/承诺的示例。
我找到了 Kotlin Promises 的示例,但它们似乎比需要的复杂得多......
例如,下面是我iOS项目中登录API函数的测试:
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;在评估之前,我需要等待其中一个完成。为此,我在调用之前创建了一个 promise,然后在两个完成块中履行承诺,然后我等待承诺在运行我的断言之前完成。
现在在 Kotlin 中,我有一个类似的测试:
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 的承诺的等价物..
在 Kotlin 中存在吗?如果没有,我将如何在 Kotlin 中实现我的 Swift testLogin 方法的一个版本?
【问题讨论】:
-
这可能会有所帮助:medium.com/@tonyowen/…
-
在 Kotlin-Android 上最直接的 Promise 类比是普通的
CompletableFuture。
标签: swift unit-testing kotlin promise kotlin-coroutines