gpt4 book ai didi

java - 如何在 java 中使用 mockito 测试文件大小?

转载 作者:行者123 更新时间:2023-11-28 21:13:23 24 4
gpt4 key购买 nike

我有需要为其创建 JUnit 测试的方法:

public class MyClass {
private String file1;
private String file2;

public void myMethodSpaceCheck(){
if (new File(file1).size() > new File(file2).size() {
throw new Exception .....
}
}
}

是否可以使用 Mockito 创建该 JUnit 测试?

最佳答案

当用 Java 处理文件时,我的首选是使用 Apache VFS,因为这样我就可以像对待任何其他 POJO 一样对待它们。显然,当您已经受困于 File API 时,需要做很多工作。

另一种选择是完全忘记 Mockito 并将这些文件写入系统。我通常会避免这种情况,因为它有时会使测试在某些系统上并行运行变得更加困难。

对于这种特定情况,我的解决方案通常是提供一个特殊的类,比如 FileBuilder,它可以实例化新的文件:

public class FileBuilder {
public java.io.File newFile(String pathname) {
return new java.io.File(pathname);
}
}

然后我在将它传递给 MyClass 之前模拟这个类,并适本地检测它:

@Test(expected = Exception.class)
public void should_fail_when_file1_is_bigger_than_file2() {
FileBuilder mockFile1 = file(2L);
FileBuilder mockFile2 = file(1L);
FileBuilder mockFileBuilder = mock(FileBuilder.class);
when(mockFileBuilder.newFile("file1").thenReturn(mockFile1);
when(mockFileBuilder.newFile("file2").thenReturn(mockFile2);

new MyClass(mockFileBuilder).myMethodSpaceCheck();
}

private static File file(long length) {
File mockFile = mock(File.class);
when(mockFile.length()).thenReturn(length);
return mockFile;
}

(您的示例提到了 File.size();我假设您指的是 File.length())

MyClass 的实际实现如下所示:

public class MyClass {
private String file1;
private String file2;
private final FileBuilder fileBuilder;

public MyClass() {
this(new FileBuilder());
}

@VisibleForTesting
MyClass(FileBuilder fileBuilder) {
this.fileBuilder = fileBuilder;
}

public void myMethodSpaceCheck() //...
}

关于java - 如何在 java 中使用 mockito 测试文件大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13356508/

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