JUnit lambda表达式

2wnc66cl  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(189)

早上好,我需要做一个测试类使用以下方法:

File[] files = directory.listFiles((dir, name) -> name.startsWith("FILE_500"+date));

为了测试这部分代码,我编写了以下代码:

when(directory.listFiles((dir,name)->name.startsWith("FILE_500"))).thenReturn(files);

但IDE显示“检测到不必要的存根”,因为name.startsWith从未在测试中调用。
我如何测试这部分代码?
此致

l2osamch

l2osamch1#

由于您希望在将lambda表达式作为参数传递给listFiles方法时测试该方法的行为,因此可以创建File类的模拟对象,并将其设置为在使用与要测试的条件匹配的lambda表达式调用listFiles方法时返回预期的文件数组。
请参考使用Mockito的示例测试用例:

@Test
    public void testListFiles() {
        File[] expectedFiles = {new File("FILE_50020230215.txt"), new File("FILE_50020230215.csv")};
        File directory = mock(File.class);
        when(directory.listFiles(any())).thenReturn(expectedFiles);
        
        File[] actualFiles = directory.listFiles((dir, name) -> name.startsWith("FILE_50020230215"));
        
        assertEquals(expectedFiles.length, actualFiles.length);
        for (int i = 0; i < expectedFiles.length; i++) {
            assertEquals(expectedFiles[i], actualFiles[i]);
        }
    }

相关问题