我在Groovy 2.x和Mockito as this user did之间遇到了类似的错误,其中Mockito.doNothing(...)
方法在Groovy中抛出异常是没有明显原因的。
该问题的公认答案解释了正在发生的事情:
问题是Groovy在到达
someVoidMethod
之前拦截了你的方法调用。实际调用的方法是getMetaClass
,它不是void方法。
我想知道:是否有#34; Groovier "模拟void方法的方法?意思是,有一种方法(一种Groovy模拟lib,也许是一种涉及闭包或其他动态结构的技术等)来模拟使用Groovy的void方法,这种方法可以解决该已识别问题中的问题。
请不要将其标记为欺骗:如果您注意到,该问题的接受答案只解释了根本问题,但并未提供任何替代方案,Groovy友好的解决方案。
下面,EntityValidator
和WebResource
来自第三方库。 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)
}