трудно добавлять значения в список, который был объявлен глобальным в junit

#java #list #junit #mocking

#java #Список #junit #издевательство

Вопрос:

мне трудно добавлять значения в список. я провел много исследований, но ни одно из них, похоже, не работает.

пожалуйста, найдите мои приведенные ниже коды

 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}
}
  

когда я вызываю method2 напрямую через junit, список пуст. как я могу добавить значения в список в 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);
  

как я могу решить проблему без рефакторинга моего кода? где я допускаю ошибки?

Комментарии:

1. Какую ошибку вы получаете?

2. это вызывает исключение нулевого указателя

3. Не могли бы вы очистить код для тестирования, чтобы он хотя бы компилировался. И вы должны добавить общедоступный метод в Test для добавления значений, а не для прямого доступа к списку

4. @Joakim я решил проблему. я также опубликовал решение.

Ответ №1:

Вы могли бы использовать отражение для настройки пользовательской реализации списка на 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);
  

Комментарии:

1. это не работает. но я не получаю исключение нулевого указателя, когда я использую этот подход.

2. я решил проблему. путем внедрения @InjectMocks в тестовый класс.

Ответ №2:

вот как я решил эту проблему.

 public class TestCases(){

@InjectMocks
Test obj=new Test();

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