我怎么能测试一个方法没有被调用非模拟对象?

Ely*_*lye 1 android unit-testing mockito kotlin

我有一个如下测试,在给定的条件下,我想确保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()
    }
}
Run Code Online (Sandbox Code Playgroud)

但它错误地说明了

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!
Run Code Online (Sandbox Code Playgroud)

错误就行了 verify(mainPresenter, never()).presenterFunction()

预计它mainPresenter不是一个模拟对象.我怎样才能测试一个被非模拟对象调用的方法?

我看到如何验证非模拟对象的方法的答案,但仍然使用Mock和Spy.我希望找到一种方法,而不需要模拟我已经拥有的类实例.

(注:以上是用Kotlin写的)

Krz*_*mic 5

根据定义,这不起作用.

verify模拟框架只能调用模拟对象.他们无法知道他们无法控制的物体发生了什么或没有发生过什么.您需要模拟演示者,将其替换为存根或...

好吧,我认为这是唯一的两个选择.