我想模拟一些动态生成的资源。为了生成这些资源,我们必须传入一个类参数。例如:Mockito匹配特定的类参数
FirstResourceClass firstResource = ResourceFactory.create(FirstResourceClass.class);
SecondResourceClass secondResource = ResourceFactory.create(SecondResource.class);
这很好,直到我试图嘲笑。我做这样的事情:
PowerMockito.mockStatic(ResourceFactory.class);
FirstResourceClass mockFirstResource = Mockito.mock(FirstResourceClass.class);
SecondResourceClass mockSecondResource = Mockito.mock(SecondResourceClass.class);
PowerMockito.when(ResourceFactory.create(Matchers.<Class<FirstResourceClass>>any()).thenReturn(mockFirstResource);
PowerMockito.when(ResourceFactory.create(Matchers.<Class<SecondResourceClass>>any()).thenReturn(mockSecondResource);
这似乎是模拟被注入到调用的类,但FirstResourceClass
正在发送mockSecondResource
,它抛出一个编译错误。
问题是(我认为)使用任何()(我从this question得到)。我相信我必须使用isA()
,但我不确定如何调用此方法,因为它需要参数Class
。我试过FirstResourceClass.class
,这给编译错误。
'any()'匹配任何东西,无论如何,所以这是行不通的。我会在这里尝试'eq()':'Matchers.eq(FirstResourceClass.class)'。这样,当参数等于给定的类时,匹配器就匹配了,这可能就是你想要的。 –