断言 OutputStreamWriter 包含正确的 OutputStream 实例
Assert OutputStreamWriter contains correct instance of OutputStream
我正在为 returns Writer
不同扩展文件的方法编写测试。
对于.gz
returnsnew OutputStreamWriter(new GZIPOutputStream(new FileOutputStream(file)), StandardCharsets.UTF_8)
对于非压缩文件 returns new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8);
如何断言OutputStreamWriter包含GZIPOutputStream
或FileOutputStream
?
OutputStreamWriter 扩展了 Writer。您的 FileOutputStream 或 GZIPOutputStream 设置为:protected Object lock inside Writer class.
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();
现在您只需要检查您需要的类是否符合预期 class。
考虑将您的代码分成两种可测试的方法,一种用于基础 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 的文本文件。
我正在为 returns Writer
不同扩展文件的方法编写测试。
对于.gz
returnsnew OutputStreamWriter(new GZIPOutputStream(new FileOutputStream(file)), StandardCharsets.UTF_8)
对于非压缩文件 returns new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8);
如何断言OutputStreamWriter包含GZIPOutputStream
或FileOutputStream
?
OutputStreamWriter 扩展了 Writer。您的 FileOutputStream 或 GZIPOutputStream 设置为:protected Object lock inside Writer class.
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();
现在您只需要检查您需要的类是否符合预期 class。
考虑将您的代码分成两种可测试的方法,一种用于基础 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 的文本文件。