Другая перспектива - вы можете быть юнит-тестированием на слишком низком уровне, что может сделать ваши тесты хрупкими.
Как правило, лучше тестировать бизнес-требования, чем детали реализации. например вы запускаете преобразование с «1234» в качестве входа, и преобразование должно инвертировать вход, так что вы ожидаете «4321» в качестве выхода.
Не проверяйте, что вы ожидаете, что "1234" будет конвертировано определенной последовательностью шагов. В будущем вы можете изменить детали реализации, тогда проверка не будет выполнена, даже если бизнес-требования все еще выполняются.
Конечно, ваш тест в вопросе может быть реальным бизнес-требованием, и в этом случае оно будет правильным.
Другой случай, когда вы захотите это сделать, - это если вызов преобразования в реальном MyClass не подходит для модульного теста, т. Е. Требует большой настройки или требует много времени. Тогда вам нужно будет издеваться или заглушить его.
Ответ на вопрос edit:
Исходя из вашего сценария, я все равно был бы склонен проверять, проверяя вывод, а не проверять, были ли вызваны определенные методы.
У вас могут быть тесты с различными входными данными XML, чтобы гарантировать, что для прохождения тестов нужно будет вызывать разные методы преобразования.
И я бы не стал полагаться на тесты для проверки наличия дублирующегося кода, а скорее рефакторизовал бы удаление дубликата кода, когда натолкнулся на него, и просто полагался на модульные тесты, чтобы гарантировать, что код все еще выполняет ту же функцию после рефакторинга.