Java Mockito对泛型的转换

Java Mockito对泛型的转换,java,unit-testing,generics,casting,mockito,Java,Unit Testing,Generics,Casting,Mockito,单元测试方法的一部分如下所示 SomeTypeCollection<SomeType> someTypeCollection = ... T currentObject = null; while( ( currentObject = (T) someTypeCollection.next() ) != null ) {...} SomeTypeCollection SomeTypeCollection=。。。 T currentObject=null; while((curren

单元测试方法的一部分如下所示

SomeTypeCollection<SomeType> someTypeCollection = ...
T currentObject = null;
while( ( currentObject = (T) someTypeCollection.next() ) != null ) {...}
SomeTypeCollection SomeTypeCollection=。。。
T currentObject=null;
while((currentObject=(T)someTypeCollection.next())!=null){…}
单元测试的相关部分是

@Mock
SomeTypeCollection<SomeType> someTypeCollectionMock;

@Mock
SomeType someTypeMock;

when(someTypeCollectionMock.next()).thenReturn(someTypeMock);
@Mock
SomeTypeCollection someTypeCollectionMock;
@嘲弄
SomeType someTypeMock;
当(someTypeCollectionMock.next())。然后返回(someTypeMock);
但是,尽管mocked next()调用似乎成功地返回了mocked对象,但转换失败,出现以下错误


>SomeType$$EnhancerByMockitoWithCGILIB$$98474372不能强制转换为(当前对象的实际类型)

您在
T
SomeType
之间没有明确的关系。因此,如何将
SomeType
转换为
T
?要使其工作,T必须是
SomeType
的超类。这不是一个
Mockito
问题,只是纯Java

根据测试,我希望您的方法如下所示:

SomeTypeCollection<SomeType> someTypeCollection = ...
SomeType currentObject = null;
while( ( currentObject = (SomeType) someTypeCollection.next() ) != null ) {...}
SomeTypeCollection SomeTypeCollection=。。。
SomeType currentObject=null;
而((currentObject=(SomeType)someTypeCollection.next())!=null){…}

public void方法(){
SomeTypeCollection SomeTypeCollection=。。。
TcurrentObject=null;
while((currentObject=(T)someTypeCollection.next())!=null){…}
}

使用以下更改(假设

T extends SomeOtherType 
在测试方法中给出了)


关于测试中的方法,T扩展了其他类型,我们不可能改变它。但是,该问题可以在Mockito中解决,如上述更新所述。什么更新?这是8天前写的,你希望我记住之前的措辞,知道现在有什么不同吗?由于存在铸造错误,请显示定义
T
SomeType
之间关系的代码块,因为这是问题的根源。顺序:1。“更新”指的是我给自己的答案,从“使用以下更改可以在Mockito中克服此问题…”开始。不,我没有。没有关系。测试标题下的方法包含“T扩展SomeOtherType”,SomeType和SomeOtherType之间没有关系,因为所有这些都来自某种遗留框架,所以我们不可能更改它。从Java的角度来看,你是正确的;然而问题是,是否可以用某种方式来处理它。它可以。尽管如此,我还是很感激你的回答。太好了!不知道有关
外部接口的信息。很不错的。干杯
T extends SomeOtherType 
@Mock(extraInterfaces=SomeType.class)
SomeOtherType someTypeMock;

stub(someTypeCollectionMock.next()).toReturn((SomeType) someTypeMock).toReturn(null);