当前位置: 首页 > 知识库问答 >
问题:

模仿java.nio.files.class时出现NullPointer异常

卫彭亮
2023-03-14
public class ClassToTest
{
    public List<String> walk(URI path)
    {
        List<String> directories= new List<String>();

        Path share = Paths.get(path);
        try
        {
            Stream<Path> folders = Files.list(share).filter(Files::isDirectory);
            folders.forEach(Path -> {
                {
                    directories.add(Path.toUri());
                }
            });

        }
        catch (IOException | SecurityException e)
        {
           System.out.println("Exception in crawling folder:"+path.toString());
           e.printStackTrace();
        }
        return directories;
    }
}
@RunWith(PowerMockRunner.class)
@PrepareForTest({Files.class, ClassToTest.class })
class ClassToTestUTest
{

    @Mock
    private Path folder1;
    @Mock
    private Path folder2;
    
    private ClassToTest underTest;
    @BeforeEach
    void setUp() throws Exception
    {
        PowerMockito.mockStatic(Files.class);
    }

    @Test
    void testWalk() throws IOException
    {
        String sharepath = "\\\\ip\\Share";
        Path temp = Paths.get(sharepath);
        
        Stream<Path> folders;
        ArrayList<Path> listOfFolders = new ArrayList<Path>();
        listOfFolders.add(folder1);
        listOfFolders.add(folder2);
        folders = listOfFolders.stream();
        
        when(Files.list(any())).thenReturn(folders);
        List<String> directories= underTest.walk(temp.toUri());
        
        //Check the directories list.
    }

}

java.lang.NullPointerException位于java.nio.file.files.provider(files.java:97),位于java.nio.file.files.newDirectoryStream(files.java:457),位于java.nio.file.files.list(files.java:3451),位于com.classtotestStutest.TestWalk(ClasstotestStutest.java:51)

我发现了许多与嘲笑这个Files类有关的问题。我使用的是PowerMock 2.0.0、RC4和Mockito 2.23.4。

我哪里出错了?

共有1个答案

柯昆杰
2023-03-14

面临着类似的问题。无法理解为什么java.nio.file.files模拟失败和其他final static方法被模拟。

class ClassUnderTest {
    
    public void methodUnderTest() throws IOException {
        //bla bla
        Files.lines(null/*some path*/);
        //bla bla
        return;
    }
}

将此更改为

class ClassUnderTest {
    
    public void methodUnderTest() throws IOException {
        //bla bla
        filesListWrapperMethod(null/*some path*/);
        //bla bla
        return;
    }
    
    @VisibleForTesting
    Stream<Path> filesListWrapperMethod(Path path) throws IOException {
        return Files.list(path);
    }

}

现在,您可以使用mockito.spy()并模拟特定的API。

 类似资料:
  • 我试图开发一个android应用程序与谷歌地图v2,位置服务和一些控制按钮。 我不想把所有这些东西放在一个MainActivity类中,所以我想我可以把所有代码拆分成更多的类。MainActivity将控制所有的GUI内容,并对地图或位置事件做出反应。 现在我有以下问题。在onCreate中,我实例化了其他类: 带有findFragmentById的行是导致异常的行。我认为这是因为片段管理器无法访

  • 问题内容: 当我尝试运行项目时,Tomcat返回异常。 有人可以帮助解决这个问题吗?配置类:https : //github.com/intrade/inventory/blob/master/src/main/java/com/springapp/mvc/InitApp/SecurityConfig.java 堆栈跟踪: 安全过滤器出现问题。项目链接:GitHub 问题答案: 该问题与SEC-2

  • igor@igor:~/hellowworld$cordova模仿android 运行命令: /home/igor/hellowworld/platforms/android/cordova/run--emulatorANDROID_HOME=/usr/本地/android-sdk-linux/工具JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 警告:未指定

  • 我正在尝试使用此程序来计算 D:\ 中的所有文件驱动器,但当我运行它时它抛出异常。

  • 我试图测试调用接口方法时是否传递了正确的值。我得到以下错误: org.mockito.exceptions.misusing.未完成验证异常:缺少的方法调用验证(mock)在这里:- 正确验证示例:验证(模拟)。doSomething() 此验证行上正在抛出错误:

  • 问题内容: 我的日历有问题。这是代码: 不能运行我的项目,因为在AndroidStudio显示错误,等…我得到nullPointException在模拟器运行时 它说 必须是以下之一:java.util.Calendar.DAY_OF_MONTHjava.util.Calendar.MONTH等… 我不明白此错误,因为它是其中之一 我有进口 对不起,我错过了它的初始化,但是还有另一个我想使用Cal