我正在嘲笑一个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(本机方法)