PowerMock和EasyMock方法嘲讽问题



我是EasyMock和PowerMock的新手,我可能一直在做一些非常基本的事情。

以下是我想测试的代码

import java.io.File;
public class FileOp() {
private static FileOp instance = null;
public string hostIp = "";
public static FileOp() {
    if(null == instance)
        instance = new FileOp();
}
private FileOp() {
    init();
}
init() {
    hostIp = "xxx.xxx.xxx.xxx";
}
public boolean deleteFile(String fileName) {
    File file = new File(fileName);
    if(file.exists()) {
        if(file.delete())
            return true;
        else
            return false;
    }
    else {
        return false;
    }
}

}

以下是我的测试代码。。。

    import org.easymock.EasyMock;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.powermock.api.easymock.PowerMock;
    import org.powermock.core.classloader.annotations.PrepareForTest;
    import org.powermock.modules.junit4.PowerMockRunner;
    import org.powermock.reflect.Whitebox;
    import java.io.File;
    import static org.easymock.EasyMock.expect;
    import static org.junit.Assert.assertFalse;
    import static org.junit.Assert.assertTrue;
    @RunWith(PowerMockRunner.class)
    @PrepareForTest(FileOp.class)
    public class FileOp_JTest
    {
@Test
@PrepareForTest(File.class)
public void deleteFile_Success(){
    try {
        final String path = "samplePath";
        //Prepare
        File fileMock = EasyMock.createMock(File.class);
        //Setup
        PowerMock.expectNew(File.class, path).andReturn(fileMock);
        expect(fileMock.exists()).andReturn(true);
        expect(fileMock.delete()).andReturn(true);
        PowerMock.replayAll(fileMock);
        //Act
        FileOp fileOp = Whitebox.invokeConstructor(FileOp.class);
        assertTrue(fileOp.deleteFile(path));
        //Verify
        PowerMock.verifyAll();
    }
    catch (Exception e) {
        e.printStackTrace();
        assertFalse(true);
    }
}

}

测试失败是因为assertTrue(fileOp.deleteFile(路径));

当被调用时,我追踪到deleteFile("samplePath")试图执行file.exists(),但它返回false。然而,我已经模拟了file.exists()以返回true。

您在测试中使用的文件不会被嘲笑。你有你的fileMock,但它没有在你的测试中使用。您正在测试的方法在下面的行中实例化它自己的新File对象:

File file = new File(fileName);

如果deleteFile方法采用File对象而不是String,则可以在那里注入mockObject,并检查所有调用是否正确。

相关内容

  • 没有找到相关文章

最新更新