Как правило, вы хотите избегать тестирования внутренних реализаций кода, чтобы вы могли выполнять рефакторинг и не прерывать какие-либо тесты. Однако, если вы хотите проверить внутреннюю часть другого объекта, тогда ответ прост. Желая протестировать частную реализацию, запах кода состоит в том, что текущий тестируемый объект выполняет слишком много работы. В свою очередь нарушает такие правила, как принцип единоличной ответственности .
Поэтому разделите GetValues на новый объект, который вы можете проверить, например:
ExampleFormatter.FormatValues()
Теперь это будет публичный класс с публичным методом, что означает, что вы можете легко его протестировать. Все, что GetValues
должен сделать сейчас, это вызвать FormatValues
с правильными параметрами. Вы можете использовать фиктивный объект , чтобы убедиться, что это происходит так, как ожидалось. Так как это теперь публично, когда можно тестировать такие вещи, как форматирование значений, как мы ожидаем и так далее. Каждый раз, когда вам трудно протестировать какой-либо код, это обычно означает, что код делает слишком много, сломайте его!