我写过一个简单的类,它使用单个流来读写文件。
现在我想通过使用JUnit测试或类似的东西来测试它,但我不知道从哪里开始,因为你可以看到这只是一个流,文本立即打印到一个新文件。
public class OneStreamIOFile {
public void fileReaderWriter(String fileReadPath, String filePrintName) {
try (Stream<String> streamReader = Files.lines(Paths.get(fileReadPath));
PrintWriter printWriter = new PrintWriter(filePrintName)) {
streamReader
.filter(line -> line.matches("[\\d\\s]+"))
.map(line -> Arrays.stream(line.trim().split("[\\s]+"))
.reduce((a, b) -> a + "+" + b).get() + "="
+ Arrays.stream(line.trim().split("[\\s]+"))
.mapToInt(Integer::valueOf).sum())
.forEachOrdered(printWriter::println);
} catch (IOException e) {
System.out.println("File not found");
e.printStackTrace();
}
}
}
主要课程
public class Main {
public static void main(String[] args) {
String filePath = "src/test/java/resources/1000.txt";
String filePrintName = "resultStream.txt";
new OneStreamIOFile().fileReaderWriter(filePath, filePrintName);
}
}
知道怎么处理这个吗?
答案 0 :(得分:2)
单元测试必须关注行为,而不是实现细节 您使用从流中读取并写入另一个流的方式无关紧要。
在这里,您必须关注所测试方法的输入和输出。
在输入中,您有String fileReadPath
表示您从中读取的文件,并且在输出中您有String filePrintName
,该文件由被测方法创建。
因此,对于单元测试OneStreamIOFile.fileReaderWriter()
,创建一个输入测试文件并创建一个预期的输出测试文件,其中包含您将输入测试文件传递给方法时所期望的内容。
当然将它们存储在您的测试文件夹中。
在测试中,将他们的String
表示传递给测试中的方法。
然后,断言该方法创建的文件与预期的输出文件具有相同的内容。
答案 1 :(得分:0)
您可以使用以下代码段检查文件是否已写入。
公共类示例{
@Rule
public TemporaryFolder temporaryFolder = new TemporaryFolder();
@Test
public void testFileReaderWriter() throws IOException, InterruptedException {
File file=temporaryFolder.newFile("sample.txt");
Date createdTime=new Date();
OneStreamIOFile options=new OneStreamIOFile();
Thread.sleep(1000);
options.fileReaderWriter(file.getAbsolutePath(),"hellow");
Date modifiedTime=new Date();
Assert.assertTrue(createdTime.getTime()<modifiedTime.getTime());
}
}
创建文件后需要花些时间,如果需要检查内容,可以阅读文件内容并断言。
TemporyFolder是一个用于处理Junit中文件操作的规则。