java - 如何将其转换为 Mockito 2.2?

标签 java mockito powermockito

我升级了我的 mockito 版本,但现在 import static se.cambio.cosmic.silmigrator.sil.port.Whitebox.setInternalState; 此导入不可用。 我用 powerMock 替换了它,但现在单元测试失败了。我需要一些专家的帮助来解决这个问题吗?

import com.google.common.collect.ImmutableList;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import se.cambio.cosmic.silmigrator.external.sil.ws.Atc;
import se.cambio.cosmic.silmigrator.external.sil.ws.SilException_Exception;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static org.mockito.Matchers.any;
import static org.mockito.Mockito.*;

import static org.testng.Assert.assertEquals;
import static se.cambio.cosmic.silmigrator.sil.port.Whitebox.setInternalState;

public class AbstractCachedArrayTest
{
  private AbstractCachedArray<Atc, String> cachedArray;

  private Map<String, Atc> cacheMap;

  @BeforeMethod
  public void setUp() 
  {
    cacheMap = new HashMap<>();
    cachedArray = mock(AbstractCachedArray.class);

    setInternalState(cachedArray, "backingMap", cacheMap);
    doCallRealMethod().when(cachedArray).get(any(ArrayList.class));
    doCallRealMethod().when(cachedArray).update(any(ArrayList.class));
  }

  @Test
  public void testGetNewData() 
  {
    Atc atc1 = new Atc();
    atc1.setAtcCode("N01AB");
    atc1.setLevel(4);
    atc1.setTextSv("sv");
    Atc atc2 = new Atc();
    atc2.setAtcCode("N01AC");
    atc2.setLevel(4);
    atc2.setTextSv("sv");

    List<Atc> dataList = new ArrayList<>();
    dataList.add(atc1);
    dataList.add(atc2);

    List<String> keys = ImmutableList.of("N01AB", "N01AC");
    when(cachedArray.load(keys)).thenReturn(dataList);

    List<Atc> data = cachedArray.get(keys);
    assertEquals(data, dataList);
  }
}

最佳答案

Mockito 模拟的强大之处在于您无需提供类的内部结构。只是外部响应。

这意味着不需要白框。但是像

when (mock.doSomehing()).thenReturn (backingMap);

所以我的建议是改用黑盒测试。然后你就跟着他的 Mockito 流程走。

关于java - 如何将其转换为 Mockito 2.2?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57322468/

相关文章:

java - 查询新的对象列表

testing - 带有构造函数参数的 Mockito 模拟

java - PowerMockito(与 Mockito)因 ExceptionInInitializerError 而失败

java - 在没有 PowerMock 的情况下,在测试类之外的不同类中调用模拟方法

java - PowerMockRunner 的替代@RunWith?

java - 根据 map 列表中的键比较值

java - DataBuffer 到 DataBufferByte 转换抛出错误

java - 使 Java Swing 应用程序持久化

java - JMockit 相当于 Mockito doNothing()

java - 如何验证静态 void 方法是否已使用 power mockito 调用