Java 使用Mockito在迭代器内模拟静态方法调用
我对这个完全陌生。请原谅我对这方面的原始知识。 这就是我正在测试的代码Java 使用Mockito在迭代器内模拟静态方法调用,java,unit-testing,for-loop,mockito,powermockito,Java,Unit Testing,For Loop,Mockito,Powermockito,我对这个完全陌生。请原谅我对这方面的原始知识。 这就是我正在测试的代码 private static void updateRules(String id) throws IOException { // Make list List<String> select = Arrays.asList( ID, NAME, APP_RULES, RULE_CONFIG);
private static void updateRules(String id) throws IOException {
// Make list
List<String> select = Arrays.asList(
ID,
NAME,
APP_RULES,
RULE_CONFIG);
// Fetch list
List<Map<String, Object>> entries = StaticUtil.list(select, id);
// Iterate over the entries
for (Map<String, Object> obj : entries) {
// Call create
CreateStaticUtils.create();
}
}
private static void updateroles(字符串id)引发IOException{
//名单
List select=Arrays.asList(
身份证件
名称
应用程序规则,
规则(配置);
//提取列表
列表条目=StaticUtil.List(select,id);
//对条目进行迭代
用于(地图对象:条目){
//调用创建
CreateStaticUtils.create();
}
}
我试图模拟这个函数的行为
@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticUtil.class)
class MyTest {
private Iterator<String> listIterator;
@SuppressWarnings("unchecked")
@Test
public final void testUpdateRules() throws IOException {
PowerMockito.mockStatic(StaticUtil.class);
PowerMockito
.when(StaticUtil.list(Mockito.anyListOf(String.class),
Mockito.anyString()))
.thenReturn(Mockito.anyList());
PowerMockito.verifyStatic(Mockito.times(1));
listIterator = mock(Iterator.class);
when(listIterator.hasNext()).thenReturn(<**Confused here**>)
}
@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticUtil.class)
类MyTest{
私有迭代器列表迭代器;
@抑制警告(“未选中”)
@试验
public final void testUpdateRules()引发IOException{
mockStatic(StaticUtil.class);
PowerMockito
.when(StaticUtil.list(Mockito.anyListOf(String.class)),
Mockito.anyString())
.thenReturn(Mockito.anyList());
验证静态(Mockito.times(1));
listIterator=mock(Iterator.class);
当(listIterator.hasNext()).thenReturn()时
}
我不知道如何在迭代器中验证CreateStaticUtils.create()调用
如何模拟和验证内部相同的交互?
另外,我是否也必须将其作为@PrepareForTest(CreateStaticUtils.class)
请帮我做同样的事情?你真的要模拟它吗?如果静态方法(类)实现不在外部API中,你肯定可以在这个测试中创建一个被测试类的实例,或者在任何创建这个实例的工厂中,只需像普通功能一样测试它,而不需要模拟