我有一个方法,我试图单元测试。这个方法接受一个参数作为一个ArrayList,并用它做事情。我试图定义的模拟是:mockito ArrayList <String>问题
ArrayList<String> mocked = mock(ArrayList.class);
这给[选中]选中转换”的警告
ArrayList<String> mocked = mock(ArrayList<String>.class);
给我一个错误
人照顾赐教为。我做错了什么?
我有一个方法,我试图单元测试。这个方法接受一个参数作为一个ArrayList,并用它做事情。我试图定义的模拟是:mockito ArrayList <String>问题
ArrayList<String> mocked = mock(ArrayList.class);
这给[选中]选中转换”的警告
ArrayList<String> mocked = mock(ArrayList<String>.class);
给我一个错误
人照顾赐教为。我做错了什么?
另一种方法是使用@Mock注释从那时起的Mockito可以使用反射型找到普通类型:
public class MyTest {
@Mock
private ArrayList<String> 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<String>.class
是一个不被Java编译器支持的构造。
对于你先试试,你应该这样做:
@SuppressWarnings("unchecked")
ArrayList<String> mocked = mock(ArrayList.class);
这是因为mock
方法只能返回原始类型。一般来说,使用原始类型并不好,因为这可能会导致运行时错误。在你的情况下,这很好,因为你知道mocked
不是真的ArrayList<String>
无论如何。
只是一个关于@SuppressWarnings("unchecked")
注释的一般建议。尽量保持它尽可能接近问题的根源。例如,你可以把它放在变量声明中,或者你可以为整个方法压缩它。通常将其压缩为一个变量,否则宽泛的方法注释可以抑制函数中的其他问题。
作为附带说明,这种特殊的问题是如第24项所讨论的(上页116-有效的Java,第二版的118)。整个泛型章节在Sun网站上以PDF形式提供:http://java.sun.com/docs/books/effective/generics.pdf – Powerlord 2010-05-27 15:22:11
这很有道理。一般来说,我不喜欢忽略警告,但我不知道你可以忽略一行。谢谢。 – Sardathrion 2010-05-27 15:22:56
谢谢。智能解决方案这有点不公平,它没有被标记为那样。 – pimpf0r 2013-11-11 10:41:13
很好的回答,我最终使用了这种方法。 – 2015-07-31 20:01:26
是的,没有看过这个年龄的问题...对不起。 – Sardathrion 2015-11-20 10:46:29