#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");}
}