Mockito.when()。thenReturn()不被其他方法使用

时间:2018-01-15 17:02:14

标签: android unit-testing mockito

我有以下测试设置:

class RepositoryTest {
    private lateinit var repository: Repository

    @Before
    fun setup() {
        repository = Mockito.mock(Repository::class.java)
        Mockito.`when`(repository.getList()).thenReturn(getMockedList())
    }

    // works
    @Test
    @Throws(Exception::class)
    fun getList() {
         val list = repository.getList()
         assertNotNull(list)
         assertFalse(list.isEmpty())
    }

    // does not work
    @Test
    @Throws(Exception::class)
    fun getList() {
        // getFilteredList is internally using getList()
        val list = repository.getFilteredList()
        assertNotNull(list)
        assertFalse(list.isEmpty())
    }
}

所以我的问题是,getList的返回类型的模拟是否不适用于隐式方法调用?什么是模拟这些隐式方法调用的适当方法? getFilteredList

1 个答案:

答案 0 :(得分:2)

嘲笑是如何运作的。

您的getFilteredList()是一个模拟对象,不包含任何实际代码。默认情况下,对于返回值的所有方法,mock将返回null,基元/原始包装器值或空集合。由于when(repository.getFilteredList()).thenCallRealMethod() 没有存根,因此您获得的默认返回值不会传递您之后的断言。

您可以使用类似

之类的方式使模拟调用您的实际方法
addSkill