即使调用了模拟方法,Mockito Verify也会每次都抛出(想要但不被调用:)错误。

时间:2019-04-09 02:51:46

标签: android unit-testing mockito android-room

我正在嘲笑一个Dao,它将注入到我正在测试的Repository类中。当使用Mockito.verify(myDao)时,它可以在Repository类之外完美地工作。当我使用它时,它说该方法被调用了一次,完全符合我的期望。但是,在存储库类内部,它将始终抛出(希望但未调用:)

奇怪的是,Mockito。when()在Repository类中可以很好地工作,我知道这是因为我用Log.d语句填充了它。 log.d语句显示使用了Mockito。when()。thenreturn(myList)传递的列表。这在存储库中。但是,即使我可以清楚地看到该方法已被调用,Mockito.verify()仍然似乎认为它从未被调用过。

@RunWith(MockitoJUnitRunner::class)
class RepositoryTests {


@InjectMocks
private lateinit var repos: Repository

@Mock
lateinit var mockedDao : MomentDao

@get:Rule
val activityRule = ActivityTestRule(MainActivity::class.java)

@get:Rule
val mockitoRule: MockitoRule = MockitoJUnit.rule()



@Test
fun hardDaoTest() {

    Mockito.`when`(mockedDao.findMomentsByBound(ArgumentMatchers.anyDouble(), ArgumentMatchers.anyDouble(),
        ArgumentMatchers.anyDouble(), ArgumentMatchers.anyDouble())).thenReturn(momentList)

    repos.queryMapMoments(LatLngBounds(LatLng(20.toDouble(), -40.toDouble()), LatLng(25.toDouble(), -30.toDouble())), zoom)

    Mockito.verify(mockedDao, times(1)).findMomentsByBound(
        ArgumentMatchers.anyDouble(), ArgumentMatchers.anyDouble(),
        ArgumentMatchers.anyDouble(), ArgumentMatchers.anyDouble())

}

因此,Mockito.when()工作正常,并且正如预期的那样,momentList包含在存储库中。 Mockito.verify每次都会失败。

对此有任何见识将不胜感激。

这是错误。

Wanted but not invoked:
mockedDao.findMomentsByBound(
<any double>,
<any double>,
<any double>,
<any double>
);
-> at 

com.example.barrechat108.RepositoryTests.hardDaoTest(RepositoryTests.kt:147)     实际上,与该模拟游戏的互动为零。

at 

com.example.barrechat108.RepositoryTests.hardDaoTest(RepositoryTests.kt:147) 在java.lang.reflect.Method.invoke(本机方法)

0 个答案:

没有答案