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

标签 java testing junit mockito

我有以下类(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/

相关文章:

java - HTTP 响应 411 : Length Required when communicating with

testing - 如何同时测试两个不同的测试组?

scala - Scala 测试数据放在哪里

javascript - 是否可以使用 javascript 读取 something.properties ? (在 .hta 文件中)>> 读取 Selenium

java - JUnit 4.11 在@After 中获取测试结果

testing - 等待一个链接出现,该链接已经在 selenium 的页面中

java - Hamcrest 错误与非此即彼和 null 或不正确的用法?

javax JavaCompiler 类路径问题

java - 使用Spring Boot时如何运行所有测试类但只启动一次嵌入式Tomcat?

java - 如何在 NetBeans 8 上使用 Java 更新 40 版本