gpt4 book ai didi

java - PowerMock和EasyMock方法模拟问题

转载 作者:行者123 更新时间:2023-12-01 05:24:03 24 4
gpt4 key购买 nike

我是 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(path));

当调用尝试执行 file.exists() 时,我追踪到了 deleteFile("samplePath") 并且它返回 false。但是,我模拟了 file.exists() 返回 true。

最佳答案

您在测试中使用的文件未被模拟。您有 fileMock,但您的测试中未使用它。您正在测试的方法在以下行中实例化它自己的新 File 对象:

File file = new File(fileName);

如果您的deleteFile方法需要一个File对象而不是一个String,您可以在那里注入(inject)您的mockObject并检查所有调用是否正确。

关于java - PowerMock和EasyMock方法模拟问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9931790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com