【问题标题】:Assert OutputStreamWriter contains correct instance of OutputStream断言 OutputStreamWriter 包含正确的 OutputStream 实例
【发布时间】:2021-12-27 07:57:25
【问题描述】:

我正在编写一个针对不同扩展文件返回 Writer 的方法的测试。

对于.gz,返回new OutputStreamWriter(new GZIPOutputStream(new FileOutputStream(file)), StandardCharsets.UTF_8)

对于非压缩文件返回new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8);

如何断言 OutputStreamWriter 包含 GZIPOutputStreamFileOutputStream

【问题讨论】:

    标签: java assert outputstream writer


    【解决方案1】:

    OutputStreamWriter 扩展了 Writer。您的 FileOutputStream 或 GZIPOutputStream 设置为:Writer 类中的受保护对象锁定。

     OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(new File("file_patch")), StandardCharsets.UTF_8);
        Field lock = outputStreamWriter.getClass().getSuperclass().getDeclaredField("lock");
        lock.setAccessible(true);
        Object o = lock.get(outputStreamWriter);
        Class<?> theClassYouNeed = o.getClass();
    

    现在您只需要检查 theClassYouNeed 是否是预期的课程。

    【讨论】:

      【解决方案2】:

      考虑将您的代码拆分为两种可测试的方法,一种用于底层 OutputStream,您可以使用 instanceof GZIPOutputStream 进行测试(或根据文件不正确),另一种方法使用 Writer 测试 - 验证 UTF-8 输出文件符合预期(有或没有 GZIP)。

      如果您使用File 而不是Path,则可以轻松修改此示例:

      public static OutputStream newOutputStream(final Path file) throws IOException {
          // identify gzipped data files
          boolean isGZ = file.getFileName().toString().toLowerCase().endsWith(".gz");
          OutputStream out = Files.newOutputStream(file);
          return isGZ ? new GZIPOutputStream(out, 8192) : out;
      }
      public static OutputStreamWriter newWriter(final Path file) throws IOException {
          return new OutputStreamWriter(newOutputStream(file), StandardCharsets.UTF_8);
      }
      

      这也意味着您可以将 GZIP 写入 newOutputStream(Path) 重新用于其他文件类型,而不仅仅是基于 UTF-8 的文本文件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-10
        • 1970-01-01
        • 2015-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-25
        相关资源
        最近更新 更多