Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java mockito ArrayList<;字符串>;问题_Java_Unit Testing_Arraylist_Mocking_Mockito - Fatal编程技术网

Java mockito ArrayList<;字符串>;问题

Java mockito ArrayList<;字符串>;问题,java,unit-testing,arraylist,mocking,mockito,Java,Unit Testing,Arraylist,Mocking,Mockito,我有一个方法,我正在尝试进行单元测试。此方法将参数作为ArrayList并使用它执行操作。我试图定义的模拟是: ArrayList<String> mocked = mock(ArrayList.class); ArrayList mocked=mock(ArrayList.class); 这会发出[未选中]未选中的“转换”警告 ArrayList<String> mocked = mock(ArrayList<String>.class); Array

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

ArrayList<String> mocked = mock(ArrayList.class);
ArrayList mocked=mock(ArrayList.class);
这会发出[未选中]未选中的“转换”警告

ArrayList<String> mocked = mock(ArrayList<String>.class);
ArrayList mocked=mock(ArrayList.class);
给我一个错误

有人愿意告诉我我做错了什么吗?

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

对于首次尝试,您应该执行以下操作:

@SuppressWarnings( "unchecked" )
ArrayList<String> mocked = mock(ArrayList.class);
@SuppressWarnings(“未选中”)
ArrayList mocked=mock(ArrayList.class);
这是因为
mock
方法只能返回原始类型。一般来说,使用原始类型并不好,因为这可能会导致运行时错误。在您的情况下,这是完全正确的,因为您知道
mock
无论如何都不是真正的
ArrayList


只是关于
@SuppressWarnings(“未选中”)的一般建议
annotation。尽量使其接近问题的根源。例如,您可以将其仅用于变量声明,也可以将其用于整个方法。通常情况下,将其用于变量,因为否则广义方法注释会抑制函数中的其他问题。

是使用@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);
  }
}
公共类MyTest{
@嘲弄
私有ArrayList mockArrayList;
...
公共作废设置(){
initMocks(this);
}
公共void testMyTest(){
当(mockArrayList.get(0)),然后返回(“Hello world”);
String result=mockArrayList.get(0);
assertEquals(“应具有正确的字符串”,“Hello world”,结果);
验证(mockArrayList).get(0);
}
}

作为旁注,这一特殊问题将作为第24项(第116-118页)进行讨论有效Java,第二版。整个泛型章节在Sun的网站上以PDF格式提供:这很有意义。一般来说,我不喜欢忽略警告,但我不知道你可以忽略一行。谢谢。谢谢。聪明的解决方案。这有点不公平,它没有标记为那样。很好的答案,我最终使用了这种方法。是的,没有很久以前就看过这个问题了…对不起。太好了,这是正确的选择!