如何 EasyMock 对返回通配符泛型的方法的调用?

2022-09-04 01:15:12

我们正在考虑切换到Spring 3.0,并在Spring 3.0,EasyMock和Java Generics的交叉点上遇到问题。

在一个地方,我们正在嘲笑Spring 3.0 AbstractBeanFactory,特别是这种方法:

public Class<?> getType(String name) throws NoSuchBeanDefinitionException { ... }

在Spring的早期版本中,这返回了一个非通用版本,一切都很好。但是,对于泛型,我们遇到了麻烦:

expect(mockBeanFactory.getType(CLASS_NAME)).andReturn(SOME_CLASS);

因为 returns 需要作为参数,这根本无法正常工作。getTypeClass<?>andReturnClass<?>

是否有已知的解决方法?


答案 1

我以前在Mockito上遇到过这样的问题。我不确定为什么会发生这种情况。您可以将 expect(..) 参数转换为非泛型类类型,ala

expect((Class) mockBeanFactory.getType(CLASS_NAME)).andReturn(SOME_CLASS);

然后,您只会看到一个警告,如果需要,可以禁止显示该警告。这不是一个非常优雅的解决方案;我打算再花几分钟时间看它。


答案 2

避免任何投射和警告的最简单方法是使用而不是(有关详细信息,请参阅我对类似问题的回答)。expectLastCall()expect(..)

所以在这种情况下:

mockBeanFactory.getType(CLASS_NAME);
expectLastCall().andReturn(SOME_CLASS);

推荐