Mockito - InjectMocks или как получить новое значение после вызова метода - PullRequest
1 голос
/ 17 марта 2019

У меня есть следующий класс:

public class DaoService {
   private Dao dao;
   private Map<String, Entity> map;

   public DaoService(Dao dao, Map<String, Entity> map){
       this.dao = dao;
       this.map = map;
   }

   public create(Entity entity){
      Dao.create(entity);
      map.put(Entity.getName(), entity);
   }
}

Я хочу проверить, что вызов метода действительно помещает новый элемент в карту, и когда я вызываю его больше с другим параметром, его размер будет равен 2.Но мне нужно игнорировать Dao.create ().

У меня есть следующий тестовый класс:

@RunWith(MockitoJUnitRunner.class)
public class DaoServiceTest {
   @Mock
   Dao dao;

   @Mock
   Map<String, Entity> map = new HashMap<>();

   @InjectMocks
   DaoService service;

   @Test
   public void testCreate(){
      Entity entity = new Entity("Alex");   // name
      service.create(entity);
      assertEquals(map.size(),1);   // failNotEquals
   }

Как мне сделать, когда я вызываю service.create(entity), что он будет игнорировать dao.create(entity)но не будет игнорировать map.put(entity.getName(), entity)?

1 Ответ

1 голос
/ 17 марта 2019

Проблема в том, что вы аннотируете map с помощью @Mock, и поэтому вы звоните map.size() на макет, а не на HashMap, который вы назначили на map.Здесь вы хотите шпионить за map, инициализированным HashMap.Таким образом, вы можете просто написать

@Spy
Map<String, Entity> map = new HashMap<>();

Или вы не можете использовать @InjectMocks и вводить Dao mock и обычный HashMap вручную.Таким образом, утверждение также будет работать.WRT игнорирует dao.create(entity), он игнорируется дизайном Mockito, если вы не настроите его иначе

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