使用带有JUnit4和Kotlin的接收器的测试方法

时间:2019-07-03 15:31:11

标签: kotlin junit

是否可以使用JUnit4对接收器进行测试? 现在我的测试如下图所示:

@Test
fun `exits adding item mode after item added`() {
    viewModel.onAddNewClick()
    viewModel.newItemName.value = "New item name"
    viewModel.onAddingConfirmed()

    assertThat(viewModel.items.value?.contains(AddNewItem), Is(false))
    assertThat(viewModel.newItemName.value, Is(""))
}

如您所见,我在每一行中都引用了viewModel(要测试的类),它使代码混乱。

添加with(viewModel)使其更干净:

@Test
fun `exits adding item mode after item added`() {
    with(viewModel) {
        onAddNewClick()
        newItemName.value = "New item name"
        onAddingConfirmed()

        assertThat(items.value?.contains(AddNewItem), Is(false))
        assertThat(newItemName.value, Is(""))
    }
}

但是,它增加了一个缩进级别,如果我能避免在每种测试方法中重复这种模式,我也将感到高兴。

我尝试过天真地将接收者添加到测试方法签名中:

fun BaggageListViewModel.`exits adding item mode after item added`() {

但是JUnit运行器不允许这种解决方案,并在测试运行时抛出异常:

java.lang.Exception: Method when no items, displays no items message should have no parameters

有什么方法可以在测试功能中使用接收器?

0 个答案:

没有答案