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中,你肯定可以在这个测试中创建一个被测试类的实例,或者在任何创建这个实例的工厂中,只需像普通功能一样测试它,而不需要模拟