发现很难在junit中声明为全局值的列表中添加值

时间:2019-03-06 11:18:37

标签: 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")) 
//true}
}

当我直接通过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);

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

2 个答案:

答案 0 :(得分:0)

您可以使用反射将自定义列表实现设置为列表。像这样:

    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);

答案 1 :(得分:0)

这就是我解决此问题的方式。

public class TestCases(){

@InjectMocks
Test obj=new Test();

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