gpt4 book ai didi

java - Junit 测试模拟文件操作

转载 作者:搜寻专家 更新时间:2023-11-01 03:11:31 24 4
gpt4 key购买 nike

我有一段类似于下面的代码,我被要求进行 Junit 测试。我们正在使用 Junit、EasyMock 和 Spring 框架。我没有做过太多 Junit 测试,对于如何模拟下面的内容有点迷茫。

基本上,当我在我的机器上编写或运行测试时,文件所在目录中的文件路径将不存在。我想知道是否有一种方法可以将对象模拟到一个临时位置,因为它实际运行的位置保证存在并在集成测试期间进行测试。

但是我想知道这样做是否明智,或者是否应该在目录实际存在时将其与项目的其余部分集成时进行测试。

感谢任何帮助,因为 Junit 测试对我来说是全新的。我环顾四周,但看不到如何做我想做的事(可能是一个很好的暗示,我不应该这样做 :P)。

String fileName = pathToFileName;

File file = new File(fileName);

if (file.exists()) {

FileUtil.removeLineFromFile(file, getValueToRemove(serialNumber));
}

最佳答案

第一个选项是将文件注入(inject)到您的类中,您可以在其中直接注入(inject)模拟。通常是更好的选择,但并不总是优雅或可行的。

通过为诸如此类的有问题的对象创建一个 protected 包装器函数,我已经从这些事情中获得了一些进展。在您的测试类中:

protected File OpenFile(String fileName) { return new File(filename;}

在测试类中:

File file = EasyMock.createNiceMock(File.class);

private MyClass createMyClass() {
return new MyClass() {
@Override protected File OpenFile(String fileName) { return file; }
};
}

@Test public testFoo() {
EasyMock.expect(file.exists()).andStubReturn(true);
//...
MyClass myClass=createMyClass();
// ...
}

如果需要,可以将本例中的构造参数(fileName)保存下来,以备验证。

关于java - Junit 测试模拟文件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9105466/

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