Как смоделировать карту в mockito? - PullRequest
0 голосов
/ 10 октября 2019

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

это мой класс

public class A {
    private Map<String, Foo> map1;
    private Map<String, Foo> map2;

    public A() { 
       this.map1 = new HashMap<String,Foo>();
       map1.put("one",new Foo());

       this.map2 = new HashMap<String, Foo>();
       map2.put("two", new Foo());
    }

    public void doSomenthing(String str){
        Foo foo = map1.get(str)
        //other actions
    }

}

и это мой тестовый класс:

public class ATest{

    @InjectMocks
    private A a;

    @Mock
    private  HashMap<String, Foo> mapTest;

    @Before
    public void initialize() throws Exception {
        when(mapTest.get(Mockito.anyString())).thenReturn(new Foo());
    }

    @Test
public void testSomething() throws Exception {
       a.doSomething("blabla");
    }
}

Ответы [ 3 ]

1 голос
/ 10 октября 2019

@InjectMocks пытается внедрить зависимости следующими способами

  1. Сначала используя construtor.
  2. Тогда установщик свойств.
  3. Тогда полевая инъекция.

# 3, вероятно, путь для вас. Попробуйте следующее:

  • Удалите инициализацию карты из конструктора к его функции-установщику.
  • Измените имя переменной mapTest на map1 в своем классе тестирования.
  • также определите map2 аналогично.
  • Тогда InjectMocks должен найти подходящее поле для инъекции.

Совместное использование дополнительных частей кода для более точного ответа.

0 голосов
/ 10 октября 2019

Вам нужно одинаковое имя и один и тот же тип в двух классах:

//main class
private  HashMap<String, Foo> map;

//test class
@Mock
private  HashMap<String, Foo> map;
0 голосов
/ 10 октября 2019

Перед тем, как прыгнуть в макет карты, нужно ли насмехаться над картой? Мок используется для замены другой части вашего кода, которую вы не хотите участвовать в модульном тестировании. Пока карта достаточно проста для запуска в модульном тесте.

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