LoggingReader extends FilterReader { @Override public int read() throws IOException { final int value = super.read(); level.log(logger, "read() : {}", value); return value; } LoggingReader(@Nonnull Reader reader, Logger logger, @Nonnull LogLevel level);  LoggingReader(@Nonnull Reader reader, @Nonnull Class<?> context, @Nonnull LogLevel level); @Override int read(); @Override int read(char[] chars, int off, int len); @Override long skip(long len); @Override boolean ready(); @Override boolean markSupported(); @Override void mark(int readAheadLimit); @Override void reset(); @Override void close();  }
@Test public void whenRead_thenCallsDelegate() throws IOException { loggingReader.read(); verify(delegateReader, only()).read(); }
@Test public void whenRead3args_thenCallsDelegate() throws IOException { char[] chars = new char[0]; int off = 0; int len = 0; loggingReader.read(chars, off, len); verify(delegateReader, only()).read(chars, off, len); }