当前位置: 首页 > 知识库问答 >
问题:

如何测试没有为非模拟对象调用的方法?

东门理
2023-03-14

我有一个测试,如下所示,在给定条件下,我想确保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不是模拟对象。如何测试为非模拟对象调用的方法?

我在如何验证一个非模拟对象的方法中看到了答案?,但这仍然是使用模拟和间谍。我希望找到一种不需要嘲笑我已经拥有的类实例的方法。

(注:以上内容以科特林书写)

共有1个答案

陶星波
2023-03-14

从定义上讲,那是行不通的。

模拟框架只能验证对模拟对象的调用。他们无法知道他们无法控制的对象发生了什么或没有发生什么。您需要模拟演示者,用存根替换它,或者。。。

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

 类似资料:
  • 问题内容: 似乎模拟仅验证模拟对象的方法是否被调用,并且模拟对象始终具有类似以下内容的东西 但是我可以创建一个模拟对象并定义 然后验证另一个对象的方法是否被调用吗? 这是我想做的事情:我定义了一个模拟环境,无论发生什么情况都返回一个响应。但是然后我想验证在不同情况下调用anotherObj的不同方法。 怎么做? 问题答案: 您可以为此使用Mockito Spy。如果您设置为间谍,则可以验证该对象上

  • 下面是我要为其创建测试的类和方法: 具体地说,我希望模拟getAnalytics.getAll(),这样它就会返回一个我已经定义的字符串。而不是方法执行它的任务。这是我的代码:

  • 问题内容: 我有一个要测试的类。只要有可能,我都会对该类进行依赖注入,该注入依赖于其他类的对象。但是,我遇到了一种情况,我想在不重新构造代码的情况下模拟对象,而不是应用DI。 这是要测试的课程: 我为此的测试课程是: 我想不出一种解决方案来模拟Dealer类中的打印对象。自从我在Test类中对其进行了模拟,但是它是在被测试的方法中创建的。我做了研究,但找不到任何好处。资源。 我知道从该方法中创建P

  • 我有一些遗留代码,并对我在该代码上所做的增强进行了编写测试。我有一个类SiteSession,并提取了一个接口ISiteSession,以便将依赖项注入到调用类中。 调用类有一个构造函数,在该构造函数中,依赖项被注入到正在测试的控制器CustomerDetails中 现在,我的测试方法已经嘲弄了依赖关系,并且我对为这个控制器或代码的任何其他部分创建的任何测试都没有问题。但是,当调用该控制器上的测试

  • 如何模拟返回已强制转换的模拟对象的方法。 试验方法。

  • 问题内容: 这是该结构及其方法的示例代码 然后我想从驻留在包外部的函数中调用方法,示例代码 我想通过模拟A 的方法来编写该功能的测试用例。 在Java中,我们有mockito,jmock框架来存根方法调用。 有什么办法,我们可以在不引入源代码的情况下模拟struct的方法调用吗? 问题答案: 要模拟方法调用,您需要模拟您的结构。 对于您提供的代码示例,我建议创建一个实现您的调用的接口。您的实际结构