Здесь:
ConsoleReaderWriter testReaderWriter = mock(ConsoleReaderWriter.class);
Дело в том, что конкретный testReaderWriter должен использоваться объектом при проверке .Прямо сейчас вы создаете фиктивный объект, который никак не связан с вашим объектом, который вы собираетесь проверять.Таким образом, вы можете следовать советам, данным в других ответах, и убедиться, что ваш макет фактически передан тестируемому объекту.
Но лучшим подходом будет: отсоединить ваш производственный кодот входа, который он использует.Ваши проблемы начинаются здесь:
new InputStreamReader(System.in)
Вы создаете считыватель на основе фиксированного ввода.Не делай этого.
Вместо этого вы можете, например, передать экземпляр InputStream в ваш объект ConsoleReaderWriter.И затем этот поток используется для всего ввода.Тогда вам не нужно ничего подделывать, вы просто подготавливаете поток с фиксированным контентом и передаете его тестируемому объекту.
Другой способ - связываться с System.in, как описано здесь например.