Я думаю, что часть вашей проблемы может заключаться в дизайне объекта вашего заказа. Попытка написать автономный тест только для того, чтобы обнаружить, что он опирается на другие функции, обычно свидетельствует о том, что они не отделены должным образом. Вот несколько практических правил, которые могут быть уместны здесь:
Если Order.DeliveryAddress - просто простой метод получения / установки, не беспокойтесь о его тестировании. Это все равно что пытаться доказать, что C # ведет себя как следует. Есть небольшое преимущество для этого. И наоборот, если ваш диспетчерский тест полагается на то, что это свойство находится в рабочем состоянии, на самом деле это не зависимость.
Однако, если Order.DeliveryAddress выполняет логику, например, гарантирует, что адрес может изменяться только, например, для не отправленных заказов, то это более сложно. Вы, вероятно, не хотите пытаться отправить весь заказ, просто чтобы проверить, что Order.DeliveryAddress больше не может быть изменен впоследствии.
Вызов принципа единой ответственности (см. Здесь 1 и 2 ), что бы класс Order теперь делал слишком много. Это и отправка заказов, и обеспечение целостности состояния объекта данных заказа. В этом случае вы, вероятно, захотите разделить диспетчерские функции на DispatcherService, который просто принимает заказ и отправляет его, устанавливая флаг IsDispatched для заказа в процессе.
Затем вы можете проверить поведение DeliveryAddress, просто установив соответствующее свойство IsDispatched.
Третий подход (который является своего рода обманом, но хорошо работает в ситуациях, когда вы пытаетесь провести некоторое тестирование над устаревшими объектами), заключается в создании подкласса Order для создания класса TestableOrder, который предоставляет тестовому устройству возможность работать с внутреннее состояние класса. Другими словами, он может предоставить метод MarkAsDispatched (), который установит внутренний флаг IsDispatched классов и, таким образом, позволит вам проверить, что DeliveryAddress можно установить только до того, как он будет помечен как отправленный.
Надеюсь, это поможет.