Проверка по порядку является отдельным понятием от того, сколько раз что-то делается, поэтому, когда вы добираетесь до 'l' и говорите Mockito, чтобы убедиться, что это произошло, оно проходит проверку по порядку, но не проходит, потому что 'l Вызов был сделан три раза, и вы (неявно) сказали ему ожидать его только один раз. Это причуды, которые я использовал ранее в Mockito, но почти каждый раз, когда это происходит, я решаю, что мой тест написан плохо, и когда я его исправляю, проблема исчезает. В вашем случае, я бы сказал, что способ излишне проверять каждый символ, написанный для Writer. Если вы хотите убедиться, что сообщение было отправлено правильно, вы должны сравнить входное сообщение с выходным сообщением. В вашем примере это может повлечь за собой использование StringWriter вместо насмешки над писателем. Тогда конец вашего теста выглядит как
assertThat(stringWriter.toString(), equalTo(message));
Если вам действительно нужно делать то, что вы делаете, все, что я могу предложить, - это покопаться в коде Mockito, чтобы посмотреть, есть ли способ сделать это, и, возможно, подать отчет об ошибке, чтобы узнать, что они говорят об этом.