gpt4 book ai didi

java - Mockito - InjectMocks 或如何在方法调用后获取新值

转载 作者:行者123 更新时间:2023-11-28 20:35:33 25 4
gpt4 key购买 nike

我有以下类(class):

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(), 实体) ?

最佳答案

问题是你用 @Mock 注释了 map 所以你是在模拟上调用 map.size() ,而不是在你分配给 mapHashMap 上。您在这里想要的是监视使用 HashMap 初始化的 map。所以你可以写

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

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

关于java - Mockito - InjectMocks 或如何在方法调用后获取新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55202826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com