如何使用mockito存根FileSystems.getDefault()方法?

时间:2015-08-31 16:40:55

标签: java mockito filesystemwatcher stubbing

这是问题陈述。我想确认(在我的Test方法中)在我的目标方法中调用fileSystem.newWatchService()。我在目标方法中获取了默认的FileSystem实例(使用FileSystems.getDefault())。任何人都知道如何存根FileSystems.getDefault()以便我可以返回我的Mock FileSystem实例?

这是我的测试方法。

@Test
public final void FMS_Creates_A_New_FolderWatcher_From_FileSystem()
{
    try {

        // Arrange
        FileSystem mockFileSystem = mock(FileSystem.class);

        // Your solution will go here!!!
        when(FileSystems.getDefault()).thenReturn(mockFileSystem); // this doesn't work!!
        // Act
        FMS _target = new FMS();
        _target.run();

        // Assert
        verify(mockFileSystem, times(1)).newWatchService();
    } catch (IOException e) {
        // There handled!!
        e.printStackTrace();
    }
}

附录:虽然我最初遇到问题存根FileSystems.getFileSystem()方法,但实际问题更多是面向设计的。通过调用默认的FileSystem,我正在扩展我的方法行为范围。

1 个答案:

答案 0 :(得分:1)

而不是模拟静态方法 - 通常是设计糟糕的代码的症状 - 而不是通过FileSystem构造函数传递FMS。这是依赖注入点的一部分。