我有以下类:
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)
时,我该怎么办?
问题是你用@Mock
注释了map
,所以你在模拟上调用map.size()
,而不是在你分配给map
HashMap
上。您在这里要监视用HashMap
初始化的map
。所以你可以写
@Spy
Map<String, Entity> map = new HashMap<>();
或者您可能不会使用@InjectMocks
并手动注入Dao
模拟和常规HashMap
。这样断言也将起作用。WRT忽略dao.create(entity)
,除非你另有配置,否则Mockito的设计会忽略它