我有以下测试设置:
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
答案 0 :(得分:2)
嘲笑是如何运作的。
您的getFilteredList()
是一个模拟对象,不包含任何实际代码。默认情况下,对于返回值的所有方法,mock将返回null,基元/原始包装器值或空集合。由于when(repository.getFilteredList()).thenCallRealMethod()
没有存根,因此您获得的默认返回值不会传递您之后的断言。
您可以使用类似
之类的方式使模拟调用您的实际方法addSkill