【问题标题】:Mockito/Spock MissingMethodInvocationExceptionMockito/Spock MissingMethodInvocationException
【发布时间】:2021-01-19 13:02:34
【问题描述】:

我目前正尝试在我的单元测试中使用 spock 而不是 junit。 但是我遇到了MissingMethodInvocationException的问题。

我在嘲笑Provider<T>.get(),如下所示

Provider<SomeOjb> a = Mock()
def setup(){
    SomeOjb obj = new SomeObj();
    Mockito.when(a.get()).thenReturn(obj)
}

但运行后我得到了

org.mockito.exceptions.misusing.MissingMethodInvocationException
when() requires as argument which has to be 'a method call on a mock'

我尝试了两种不同的方法,其中一种是将模拟创建为 def a = Mock(Provider&lt;SomeObj&gt;) 但在这种情况下,我在运行后出现语法错误,问题在于 &lt;&gt;

最后一个想法是只使用注释

@Mock
Provider<SomeObj> a;

并像以前一样使用when/then,在这种情况下它工作得很好。 知道为什么第一个想法不正确吗?

【问题讨论】:

    标签: unit-testing groovy mockito spock


    【解决方案1】:

    显然我很愚蠢。 问题是因为我使用了 Mockito api。不是 spock mock api。

    它应该看起来像:

    Provider<SomeOjb> a = Mock()
    def setup(){
        SomeOjb obj = new SomeObj();
        a.get() >> obj
    }
    

    【讨论】:

    • 你当然不傻,尽管 Spock 有自己的内置模拟框架,但你使用 Mockito 只是让自己的生活变得更加艰难。那只是边做边学。尽管如此,我还是建议您在使用您从未使用过的工具之前阅读出色的 Spock 手册。您会在那里发现许多很酷的功能,我保证,这真的值得您花时间和精力阅读。 ?
    猜你喜欢
    • 1970-01-01
    • 2019-01-04
    • 2020-08-13
    • 1970-01-01
    • 2021-06-29
    • 1970-01-01
    • 2018-07-01
    • 1970-01-01
    • 2012-06-06
    相关资源
    最近更新 更多