在Groovy中模拟void方法

时间:2014-12-08 19:52:07

标签: groovy mocking closures mockito dynamic-languages

我在Groovy 2.x和Mockito as this user did之间遇到了类似的错误,其中Mockito.doNothing(...)方法在Groovy中抛出异常是没有明显原因的。

该问题的公认答案解释了正在发生的事情:

  

问题是Groovy在到达someVoidMethod之前拦截了你的方法调用。实际调用的方法是getMetaClass,它不是void方法。

我想知道:是否有#34; Groovier "模拟void方法的方法?意思是,有一种方法(一种Groovy模拟lib,也许是一种涉及闭包或其他动态结构的技术等)来模拟使用Groovy的void方法,这种方法可以解决该已识别问题中的问题。

请不要将其标记为欺骗:如果您注意到,该问题的接受答案只解释了根本问题,但并未提供任何替代方案,Groovy友好的解决方案。


模拟void方法的示例

下面,EntityValidatorWebResource来自第三方库。 Address是一个属于我项目的类。

@Test
void test() {
    given:
    EntityValidator mockValidator = Mockito.mock(EntityValidator)
    WebResource mockResource = Mockito.mock(WebResource)
    Address mockAddress = Mockito.mock(Address)
    Mockito.doNothing().when(mockValidator).validateId(1L)
    Mockito.when(mockResource.get(Address)).thenReturn(mockAddress)

    GetAddressCommandImpl fixture = new GetAddressCommandImpl(mockValidator, mockResource)
    fixture.id = 1L

    when:
    Address address = fixture.run()

    then:
    assert(address == mockAddress)
}

0 个答案:

没有答案