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

时间:2010-07-15 19:13:21

标签: java spring generics wildcard easymock

我们正在考虑切换到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);

由于getType返回Class<?>andReturn需要Class<?>作为参数,而这种参数无法正常运行。

这是否有一个已知的解决方法?

2 个答案:

答案 0 :(得分:21)

我之前遇到过像Mockito这样的问题。我不确定它为什么会发生。您可以将expect(..)参数强制转换为非泛型类类型ala

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

然后你会发出一个警告,你可以根据需要进行压制。不是很优雅的解决方案;我会花几分钟时间看一下。

答案 1 :(得分:3)

避免任何播放和警告的最简单方法是使用Appearing而不是expectLastCall()(有关详细信息,请参阅my answer to a similar question)。

所以在这种情况下:

expect(..)