我升级了我的 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/