Это зависит от того, как вы моделируете домен (ы) вашей программы.
Если вы моделируете домены с точки зрения данных, хранящихся в структурах данных и методах, которые считывают данные из одной структуры данных и хранят производные данные в другой структуре данных (процедуры или функции зависят от того, насколько процедурным или функциональным является ваш проект), то имитируйте объекты не подходят. Так называемое «государственное» тестирование - это то, что вы хотите. Результат, который вас волнует, заключается в том, что процедура помещает правильные данные в правильные переменные, и то, что она вызывает, чтобы это произошло, является лишь деталями реализации.
Если вы моделируете домены с точки зрения протоколов обмена сообщениями, по которым объекты взаимодействуют, то протоколы - это то, что вас волнует, и какие данные хранятся объектами для координации их поведения в протоколах, в которых они играют роли, - это просто реализация подробно. В этом случае фиктивные объекты являются подходящим инструментом для задания, и тестирование на основе состояния слишком тесно связывает тесты с несущественными деталями реализации.
И в большинстве объектно-ориентированных программ есть сочетание стилей. Некоторый код будет написан чисто функционально, трансформируя неизменные структуры данных. Другой код будет координировать поведение объектов, которые со временем меняют свое скрытое внутреннее состояние.
Что касается высокого уровня охвата тестами, он действительно мало о чем говорит. Низкий охват тестированием показывает, где вы проходите неадекватное тестирование, но высокий охват тестированием не показывает, что код протестирован надлежащим образом. Тесты могут, например, проходить по путям кода и, таким образом, увеличивать статистику покрытия, но фактически не делать никаких утверждений о том, что сделали эти пути кода. Кроме того, что действительно важно, так это то, как различные части программы ведут себя в комбинации, какое покрытие модульного теста вам не скажет. Если вы хотите убедиться, что ваши тесты действительно адекватно тестируют поведение вашей системы, вы можете использовать инструмент Mutation Testing. Это медленный процесс, поэтому его нужно запускать в ночной сборке, а не при каждой регистрации.