Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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 发现难以向junit中声明为全局的列表中添加值_Java_List_Junit_Mocking - Fatal编程技术网

Java 发现难以向junit中声明为全局的列表中添加值

Java 发现难以向junit中声明为全局的列表中添加值,java,list,junit,mocking,Java,List,Junit,Mocking,我发现很难在列表中添加值。我做了很多研究,但没有一项是有效的 请在下面找到我的密码 public class Test(){ List <String> list=new ArrayList<>(String); // global public Object method1(){ // here am adding the values to list } String method2(){ if(list.Contains("somethig")) //

我发现很难在列表中添加值。我做了很多研究,但没有一项是有效的

请在下面找到我的密码

public class Test(){

List <String> list=new ArrayList<>(String); // global

public Object method1(){
   // here am adding the values to list
}

String method2(){
if(list.Contains("somethig")) 
//true}
}
公共类测试(){
List List=new ArrayList(字符串);//全局
公共对象方法1(){
//我在这里向列表中添加值
}
字符串方法2(){
if(list.Contains(“something”))
//真的}
}
当我直接通过junit调用method2时,列表是空的。如何在junit中向列表添加值?这正是我难以增加价值的地方


我试过下面的方法,但不起作用它抛出空指针异常

List<Test> obj=new ArrayList<Test>();

Test cObject=Mockito.mock(Test.class); 
cObject.list.add("something"); //getting error in this line
obj.add(cObject);
List obj=new ArrayList();
Test-cObject=Mockito.mock(Test.class);
cObject.list.add(“某物”)//获取此行中的错误
对象添加(cObject);

如何在不重构代码的情况下解决问题?我哪里出错了?

您可以使用反射将自定义列表实现设置为list。比如:

    ArrayList<Object> value = new ArrayList<>();
    value.add("something");
    Test obj = new Test();
    Field field = obj.getClass().getDeclaredField("name_of_field");
    // need for private field access
    field.setAccessible(true);
    field.set(obj, value);
ArrayList value=new ArrayList();
增加价值(“某物”);
测试对象=新测试();
Field Field=obj.getClass().getDeclaredField(“字段的名称”);
//需要私人现场访问
字段。setAccessible(true);
字段设置(对象,值);

我就是这样解决这个问题的

public class TestCases(){

@InjectMocks
Test obj=new Test();

@Test
public void list(){
MockitoAnnotations.initMocks(this);
obj.list.add("something");}
}

你会得到什么错误?它抛出空指针异常。你可以清理代码进行测试,这样它至少可以编译。您应该在测试中添加一个公共方法来添加值,而不是访问列表directly@Joakim我解决了这个问题。我也发布了解决方案。它不起作用。但是当我使用这种方法时,我没有得到空指针异常。我已经解决了这个问题。通过在测试类上注入@InjectMock。