14

我们正在考虑切换到 Spring 3.0 并遇到 Spring 3.0、EasyMock 和 Java 泛型的交叉问题。

在一个地方,我们模拟了一个 Spring 3.0 AbstractBeanFactory,特别是这个方法:

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

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

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

因为getType返回Class<?>andReturn需要Class<?>作为参数,这根本无法正常工作。

有没有已知的解决方法?

4

2 回答 2

21

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

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

然后你只会有一个警告,如果你愿意,你可以压制它。不是一个非常优雅的解决方案;我打算再花几分钟看看它。

于 2010-07-15T19:40:51.363 回答
3

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

所以在这种情况下:

mockBeanFactory.getType(CLASS_NAME);
expectLastCall().andReturn(SOME_CLASS);
于 2016-02-02T16:42:47.023 回答