[英]unit testing Android function with handler
我是第一次进行单元测试,但我迷失了一些特定的案例。
尽管阅读了很多,但我对如何在 Android 中像这样测试 function 感到困惑:
void myFunction() {
MyThread myThread = new MyThread();
myThread();
}
class MyThread extends Thread {
public void run() {
Looper.prepare();
// Tasks to do in background
handler.sendEmptyMessage(101);
}
}
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 101:
// Get the results
// Update UI
}
}
};
我已经在这个 SO 答案https://stackoverflow.com/a/5722193/1639825中阅读了有关“CountDownLatch”的信息,但我不知道如何使用它。
我假设 myFunction() 是一个 Activity 的成员 function,那么你可以使用 Espresso 测试框架。
Espresso 提供了一套复杂的同步功能。 然而,框架的这一特性仅适用于在 MessageQueue 上发布消息的操作,例如在屏幕上绘制其内容的 View 的子类。
这是您的逻辑的测试代码:
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.matcher.RootMatchers.withDecorView
import androidx.test.espresso.matcher.ViewMatchers.*
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.LargeTest
import androidx.test.rule.ActivityTestRule
import org.hamcrest.Matchers.`is`
import org.hamcrest.Matchers.not
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@RunWith(AndroidJUnit4::class)
@LargeTest
class HandlerActivityTest {
@get:Rule
val activityRule = ActivityTestRule(HandlerActivity::class.java)
@Test
fun testRefreshUIByHandler() {
activityRule.activity.myFunction()
onView(withText("you UI change")).check(matches(isDisplayed()))
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.