2

要进行单元测试的方法的一部分如下

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

单元测试的相关部分将是

@Mock
SomeTypeCollection<SomeType> someTypeCollectionMock;

@Mock
SomeType someTypeMock;

when(someTypeCollectionMock.next()).thenReturn(someTypeMock);

然而,虽然模拟的 next() 调用似乎成功返回了模拟的对象,但转换失败并出现以下错误

> SomeType$$EnhancerByMockitoWithCGILIB$$98474372 无法转换为 (ActualTypeOfCurrentObject)

4

2 回答 2

3

可以使用以下更改在 Mockito 中克服该问题(假设

T extends SomeOtherType 

在被测方法中给出)

@Mock(extraInterfaces=SomeType.class)
SomeOtherType someTypeMock;

stub(someTypeCollectionMock.next()).toReturn((SomeType) someTypeMock).toReturn(null);
于 2013-09-20T11:37:30.773 回答
0

T您在和之间没有明确的关系SomeType。因此,如何SomeType转换为T?为此,它T必须是SomeType. 这不是Mockito问题,只是直接的Java。

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

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

或者

public <T super SomeType> void method(){
   SomeTypeCollection<SomeType> someTypeCollection = ...
   TcurrentObject = null;
   while( ( currentObject = (T) someTypeCollection.next() ) != null ) {...}
}
于 2013-09-12T17:08:36.547 回答