powerMockito mock文件对象

Bug*_*nny 2 java mockito

我有问题模拟whenNew(File.class)使用PowerMockito.这是我要测试的方法:

public void foo() {
    File tmpFile = new File("Folder");
    if (!tmpFile.exists()) {
        if (!configFolder.mkdir()) {
            throw new RuntimeException("Can't create folder");
        }
    }
    File oneFileInFolder = new File(tmpFile, "fileOne.txt");
    if (oneFileInFolder.exists()){
        //do something
    } 
}
Run Code Online (Sandbox Code Playgroud)

这是我写的测试代码:

static File mockFile;
@Before
public void setUp() throws Exception {
    //....some code 
    mockFolder = mock(File.class);
    when(mockFolder.getPath()).thenReturn("Folder");
    when(mockFolder.exists()).thenReturn(true);
    whenNew(File.class).withParameterTypes(String.class).withArguments(anyString()).thenReturn(mockFolder);
    //...some code
}
Run Code Online (Sandbox Code Playgroud)

但是当我调试我的测试用例时,我仍然看到在我的pwd中创建了一个真正的文件夹.我不想在运行我的测试用例时创建文件夹.任何的想法?

mik*_*łak 6

由于您未在问题中指明此内容,因此可能缺少以下内容:

@PrepareForTest(ClassYoureCreatingTheFileInstanceIn.class)
Run Code Online (Sandbox Code Playgroud)

根据维基:

请注意,您必须准备创建MyClass的新实例的类,而不是MyClass本身.例如,如果执行新MyClass()的类被称为X,那么您必须执行@PrepareForTest(X.class)才能使newNew工作.

换句话说,Xfoo()您的示例中包含的类.