我已经编写了一个简单的类,它使用单个流来读取和写入文件。
现在我想通过使用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);
}
}你知道怎么处理这件事吗?
发布于 2018-02-06 19:19:02
单元测试必须关注行为,而不是实现细节。
你用来从一个流中读取和写入另一个流的方式并不重要。
在这里,您必须关注作为测试方法的输入和输出的内容。
在input中,您有表示从中读取的文件的String fileReadPath,在output中,您有String filePrintName,这是由被测方法创建的文件。
因此,要对OneStreamIOFile.fileReaderWriter()进行单元测试,需要创建一个输入测试文件,并创建一个预期的输出测试文件,其中包含将输入测试文件传递给该方法时所期望的内容。
当然,将它们存储在您的测试文件夹中。
在测试中,将它们的String表示传递给被测试的方法。然后,断言该方法创建的文件与预期的输出文件具有相同的内容。
发布于 2018-02-06 19:29:03
您可以使用以下代码片段检查该文件是否已写入。
公共类示例{
@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中处理文件操作的规则。
https://stackoverflow.com/questions/48641719
复制相似问题