扩展MockitovalidationKotlin不工作(以“kotlin方式”)

我想扩展validation,以允许在同一模拟对象检查多个命令,但它不工作,它编译,但运行它不会运行每个命令相同。

只是想避免写更多的东西,如:

Mockito.verify(mockedView).initViews() Mockito.verify(mockedView).setImage(user.photoUrl) 

并写更多的像:

 Mockito.verify(mockedView){ initViews() setImage(user.photoUrl) } 

第一次尝试:

 @Test fun onCreate_loadLoginInfo() { val user = MockUser.user() presenter.onCreate(mockedView, user) Mockito.myVerify(mockedView) { initViews() setImage(user.photoUrl) setName(user.name) setEmail(user.email) } } class Mockito { companion object } fun  Mockito.Companion.myVerify(obj: T, func: T.() -> Unit) { org.mockito.Mockito.verify(obj).func() } 

第二次尝试:

 @Test fun onCreate_loadLoginInfo() { val user = MockUser.user() presenter.onCreate(mockedView, user) Mockito.myVerify(mockedView) { it.initViews() it.setImage(user.photoUrl) it.setName(user.name) it.setEmail(user.email) } } class Mockito { companion object } fun  Mockito.Companion.myVerify(obj: T, func: (T) -> Unit) { val mock = org.mockito.Mockito.verify(obj) func(mock) } 

但是,这些都不起作用,即使我不在主持人的方法中,所有的测试都通过了,我该怎么做?

我也遇到了同样的问题, 在Mockito周围写了一个Facade 。 我的库允许validation一个模拟对象的几个调用:

 val list = mock(MutableList::class) list.add("String 1") list.add("String 2") list.size() verify(list) { times(2).add(anyString()) times(1).size() } 

请看自述,也许它可以帮助你

如我错了请纠正我。 你想在你的测试中避免多次verify()调用。

 @Test fun onCreate_loadLoginInfo() { // ... verify(mockedView).initViews() verify(mockedView).setImage(user.photoUrl) verify(mockedView).setName(user.name) verify(mockedView).setEmail(user.email) } 

我稍微修改了你的第二个方法:

 @Test fun onCreate_loadLoginInfo() { // ... verifyAll(mockedView) { it().initViews() it().setImage(user.photoUrl) it().setName(user.name) it().setEmail(user.email) } } fun  verifyAll(mock: T, func: (() -> T) -> Unit) { func { Mockito.verify(mock) } } 

正如你现在所看到的,我们正在将函数parameter passing给func()并且需要适当地使用它(作为函数使用,而不是作为对象)。

你应该这样做。 verify必须在每个模拟方法调用之前调用。