В пакете iotest (https://pkg.go.dev/testing/iotest) реализованы утилиты для тестирования ридеров и райтеров. Это удобный пакет, о котором разработчики часто забывают.
При реализации собственного io.Reader важно не забыть протестировать его с помощью iotest.TestReader. Эта вспомогательная функция проверяет, правильно ли ведет себя ридер: возвращает ли он число прочитанных байтов точно, заполняет ли заданный срез и т.д. Она тестирует также различные варианты поведения, если предоставленный модуль чтения реализует такие интерфейсы, как io.ReaderAt.
Предположим, есть пользовательский LowerCaseReader, который передает поток строчных букв из заданного источника ввода io.Reader. Вот как протестировать поведение ридера и убедиться, что оно правильное: