Mockito - 注入模拟或如何在方法调用后获取新值



我有以下类:

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(),而不是在你分配给mapHashMap上。您在这里要监视用HashMap初始化的map。所以你可以写

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

或者您可能不会使用@InjectMocks并手动注入Dao模拟和常规HashMap。这样断言也将起作用。WRT忽略dao.create(entity),除非你另有配置,否则Mockito的设计会忽略它

相关内容

  • 没有找到相关文章

最新更新