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

时间:2016-05-05 10:05:41

标签: 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()
    }
}

然而它出错了

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不是模拟对象。我怎样才能测试一个被非模拟对象调用的方法?

我在how to verify a method of a non-mock object is called?中看到答案,但仍然使用Mock和Spy。我希望找到一种方法,而不需要模拟我已经拥有的类实例。

(注:以上是用Kotlin写的)

1 个答案:

答案 0 :(得分:5)

根据定义,它不会起作用。

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

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