我有一个测试,如下所示,在给定的条件下,我希望确保mainPresenter.presenterFunction()
不会被调用。
class MainPresenterTest {
val mainPresenter: MainPresenter
val mainView: MainView
val mainBridge: MainBridge
init {
mainView = mock(MainView::class.java)
webBridge = mock(MainBridge::class.java)
mainPresenter = MainPresenter(mainView, mainBridge)
}
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
}
@Test
fun simpleTeset1() {
// Given
whenMock(mainView.viewFunctionCondition()).thenReturn(true)
// When
mainPresenter.onTriggger()
// Then
verify(mainView).viewFunction1()
verify(mainPresenter, never()).presenterFunction()
verify(mainView, never()).viewFunction2()
}
}
然而,它错误地指出
org.mockito.exceptions.misusing.NotAMockException:
Argument passed to verify() is of type MainPresenter and is not a mock!
Make sure you place the parenthesis correctly!
错误在verify(mainPresenter, never()).presenterFunction()
线上
由于mainPresenter
不是模拟对象,因此应为它。如何测试为非mock对象调用的方法?
我在如何验证非mock对象的方法被调用中看到了答案?,但这仍然在使用Mock和Spy。我希望找到一种不需要为我已经拥有的类实例进行mock的方法。
(注意:以上是用Kotlin编写的)
根据定义,这是行不通的。
模拟框架只能verify
调用模拟对象。他们无法知道他们无法控制的对象发生了什么或没有发生什么。你要么需要嘲笑你的演讲者,用存根代替它,要么。。。
嗯,我认为这是仅有的两种选择。