繁体   English   中英

使用 Mockito 在迭代器中模拟静态方法调用

[英]Mocking a static method call inside iterator using Mockito

我对此完全陌生。 请原谅我对这方面的原始知识。 所以,这是我正在测试的一段代码

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();
    }
}

我试图模拟这个函数的行为,

@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**>)
    }

我不确定如何验证CreateStaticUtils.create() call inside the iterator

如何在内部模拟和验证相同的交互?

另外,我是否必须把它也作为@PrepareForTest(CreateStaticUtils.class)

请帮我一样吗?

你真的有必要嘲笑它吗? 如果静态方法(类)实现不在外部 API 中,您肯定可以在此测试或任何用于创建此实例的工厂中创建测试类的实例,并像正常功能一样对其进行测试,无需模拟

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM