繁体   English   中英

单元测试 Android function 与处理程序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM