首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java 8 Streams IO -测试

Java 8 Streams IO -测试
EN

Stack Overflow用户
提问于 2018-02-06 19:14:48
回答 2查看 275关注 0票数 0

我已经编写了一个简单的类,它使用单个流来读取和写入文件。

现在我想通过使用JUnit测试或类似的东西来测试它,但我不知道从哪里开始,因为你可以看到,这只是一个流,文本立即打印到一个新文件中。

代码语言:javascript
复制
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();
    }
  }
}

主类

代码语言:javascript
复制
  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);
        }
    }

你知道怎么处理这件事吗?

EN

回答 2

Stack Overflow用户

发布于 2018-02-06 19:19:02

单元测试必须关注行为,而不是实现细节。

你用来从一个流中读取和写入另一个流的方式并不重要。

在这里,您必须关注作为测试方法的输入输出的内容。

在input中,您有表示从中读取的文件的String fileReadPath,在output中,您有String filePrintName,这是由被测方法创建的文件。

因此,要对OneStreamIOFile.fileReaderWriter()进行单元测试,需要创建一个输入测试文件,并创建一个预期的输出测试文件,其中包含将输入测试文件传递给该方法时所期望的内容。

当然,将它们存储在您的测试文件夹中。

在测试中,将它们的String表示传递给被测试的方法。然后,断言该方法创建的文件与预期的输出文件具有相同的内容。

票数 2
EN

Stack Overflow用户

发布于 2018-02-06 19:29:03

您可以使用以下代码片段检查该文件是否已写入。

公共类示例{

代码语言:javascript
复制
@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中处理文件操作的规则。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48641719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档