Вы никогда не издеваетесь над доменным объектом
Это скорее эвристика, чем лучшая практика.И я могу себе представить, что это имеет смысл в некоторых проектах.
Эта эвристика может помочь иметь лучшие тесты.Хорошие тесты легко написать, легко прочитать, и они сломаются, как только что-то пойдет не так.Если вы издеваетесь над моделью своего домена, вам, вероятно, также придется высмеивать ее поведение.И если у вас есть какое-то сложное поведение в вашей модели, насмешка будет занимать много времени.Тест также будет более хрупким (при прогнозировании выходных данных модели предметной области могут возникать ошибки).
Другой альтернативой является проведение общедоступного модульного тестирования.Это означает, что проверяемый модуль будет представлять собой не отдельный класс, а класс и некоторые его зависимости.Другими словами, вы просто используете конкретный объект вашей доменной модели в тесте.
Обычно я высмеиваю объекты и просто проверяю, вызывается ли метод Update с соответствующими аргументами.Но теперь я должен проверить, правильно ли он вызывается, проверяя его поля и издеваясь над калькулятором, точно так же, как я это делал при модульном тестировании самого метода Update.
Проверка того, что вызывается метод updateне обязательно означает успех теста.Это, вероятно, не то, что вы хотите проверить, чтобы убедиться, что ваш сервис работает правильно.Если вы пройдете конкретный класс вашей модели (включая калькуляторы), вам не придется делать никаких бесполезных проверок или повторять то, что было сделано в других тестах.
Одно из различий между этим решением и классами тестированияизолированно то, что при наличии ошибки в модели вашего домена многие другие тесты не пройдут.Но, на мой взгляд, это совершенно нормально, так как все равно придется исправить.