【发布时间】:2016-05-05 10:05:41
【问题描述】:
我有一个测试如下,在给定的条件下,我想确保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写的)
【问题讨论】:
-
正如您链接到的答案所示,spy 旨在解决这个问题 - 让您验证对非模拟对象实例的调用。能解释一下为什么spy不能用吗?
-
你试图做的事情也是糟糕的类设计的标志。保持内部隐私,并测试外部行为。
标签: android unit-testing mockito kotlin