Как выполнить определенную функцию после каждой функции в Kotlin - PullRequest
0 голосов
/ 01 июля 2019

Я пишу код модульного теста Эспрессо.Я хочу сделать снимок экрана для каждого действия без указания

takeSpoonScreenshot("")

Это мой тестовый код AndroidJUnit4:

@Test
fun givenVideoDetail_whenChooseCurrentItem_thenShowCountLabel() {
    pickerPage {
        clickFirstVideoItem()
    }
    videoDetailPage {
        clickSelectCheckBox()
        assertCountLabel()
    }
}

, а это мой VideoDetailPage.kt:

fun videoDetailPage(func: VideoDetailPage.() -> Unit) = VideoDetailPage.apply {
    assertFirstPage()
    func()
}

fun screenshotAfterAction(func: VideoDetailPage.() -> Unit) = VideoDetailPage.apply {
    func()
    takeSpoonScreenshot("")
}

object VideoDetailPage : BaseActions() {
    // Write 'How to test' here

    fun assertFirstPage() {
        resourceIsDisplayed(R.id.send_balloon_image)
        resourceIsDisplayed(R.id.media_detail_item_check_box)
        resourceIsDisplayed(R.id.video_editor_mute_btn)
    }

    fun clickFilterButton() = takeScreenshotAfterFunction {
        clickButton(R.id.image_editor_filter)
    }

    fun clickSelectCheckBox() {
        clickButton(R.id.media_detail_item_check_box)
    }

    fun assertFilterSelectionListIsOpen() {
        resourceIsDisplayed(R.id.media_filter_list)
    }

    fun assertCountLabel() {
        resourceIsDisplayed(R.id.media_editor_selected_count)
    }
}

Смотри, что я сделал takeScreenshotAfterFunction, но это неправильно, потому что я должен написать takeScreenshotAfterFunction N раз.

...