Как проверить логи событий c? - PullRequest
0 голосов
/ 01 апреля 2020

В моей ViewModel у меня следующее веселье:

fun onTitleClick(titleName: Int) {
    when (titleName) {
        R.string.about_terms_service -> {
            termsOfServiceItemClickEvent.postValue(
                ViewModelEvent(
                    WebViewFragment.newBundle(
                        url = TERMS_LINK,
                        title = "Terms of Service"
                    )
                )
            )
        }
        R.string.about_open_source_licenses -> licenseItemClickEvent.postValue(ViewModelEvent(R.string.about_open_source_licenses))
    }
}

И у меня следующий класс событий:

open class ViewModelEvent<out T>(private val content: T? = null) {

    var hasBeenHandled = false
        private set

    /**
     * Returns the content and prevents its use again.
     */
    fun getContentIfNotHandled(): T? {
        return if (hasBeenHandled) {
            null
        } else {
            hasBeenHandled = true
            content
        }
    }

    /**
     * Returns the content, even if it's already been handled.
     */
    fun peekContent(): T? = content
}

В классе событий у меня следующий fun getContentIfNotHandled() с некоторыми логами c , Как я могу проверить эту логику c мои тесты Robolectri c?

Также вот некоторый код из моего фрагмента:

viewModel.licenseItemClickEvent.observe(this, Observer<ViewModelEvent<Int>> {
    it?.getContentIfNotHandled()?.let { activity?.addFragment(LicensesFragment()) }
})

1 Ответ

0 голосов
/ 03 апреля 2020

Решено с помощью следующего решения:

@RunWith(RobolectricTestRunner::class)
class ViewModelEventTest {

    @Test
    @Throws(Exception::class)
    fun getContentIfNotHandledTest() {
        val viewModelEvent = ViewModelEvent(5)

        assertFalse(viewModelEvent.hasBeenHandled)
        assertEquals(5, viewModelEvent.getContentIfNotHandled())
        assertTrue(viewModelEvent.hasBeenHandled)
        assertNull(viewModelEvent.getContentIfNotHandled())
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...