Search code examples
javaassertoutputstreamwriter

Assert OutputStreamWriter contains correct instance of OutputStream


I'm writing a test for a method that returns Writer for different extension files.

For .gz returns new OutputStreamWriter(new GZIPOutputStream(new FileOutputStream(file)), StandardCharsets.UTF_8)

For non compressed files returns new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8);

How to assert that OutputStreamWriter contains GZIPOutputStream or FileOutputStream?


Solution

  • OutputStreamWriter extends Writer. Your FileOutputStream or GZIPOutputStream is set as: 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();
    

    Now you just need to check if theClassYouNeed is the expected class.