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。