модульное тестирование Android функция с обработчиком - PullRequest
0 голосов
/ 17 июня 2020

Я впервые работаю с модульным тестированием и теряюсь с некоторыми конкретными c случаями.

Несмотря на то, что я много читаю, я не понимаю, как тестировать такую ​​функцию в Android:

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        
        }
    }
};

Я читал о «CountDownLatch», как в этом SO-ответе { ссылка }, но я не знаю, как это использовать.

1 Ответ

0 голосов
/ 21 июня 2020

Я предполагаю, что myFunction () является функцией-членом Activity, тогда вы можете использовать среду тестирования Espresso.

Espresso предоставляет сложный набор возможностей синхронизации. Эта характеристика c фреймворка, однако, применяется только к операциям, которые отправляют сообщения в MessageQueue, например к подклассу View, который рисует его содержимое на экране.

Вот тестовый код для ваш лог c:

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()))
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...