mockito ArrayList 问题

我有一个方法,我试图进行unit testing。 此方法将参数作为ArrayList并使用它执行操作。 我试图定义的模拟是:

ArrayList mocked = mock(ArrayList.class); 

这给出了[未经检查]未经检查的转换“警告。

 ArrayList mocked = mock(ArrayList.class); 

给我一个错误。

任何人都想关心我做错了什么?

另一种方法是使用@Mock注释,因为Mockito可以使用类型reflection来查找generics类型:

 public class MyTest { @Mock private ArrayList mockArrayList; ... public void setUp() { MockitoAnnotations.initMocks(this); } public void testMyTest() { when(mockArrayList.get(0)).thenReturn("Hello world"); String result = mockArrayList.get(0); assertEquals("Should have the correct string", "Hello world", result); verify(mockArrayList).get(0); } } 

ArrayList.class是Java编译器不支持的构造。

首先尝试,你应该这样做:

 @SuppressWarnings( "unchecked" ) ArrayList mocked = mock(ArrayList.class); 

发生这种情况是因为mock方法只能返回原始类型。 通常,使用原始类型并不好,因为这可能会导致运行时错误。 在你的情况下它完全没问题,因为你知道mocked不是REAL ArrayList

关于@SuppressWarnings( "unchecked" )注释的一般建议。 尽量使其尽可能接近问题的根源。 例如,您可以将其仅用于变量声明,或者可以为整个方法禁止它。 通常会对变量进行抑制,因为否则广义方法注释可以抑制函数中的其他问题。