Допустим, у меня есть таблица «Клиенты» и таблица «Заказы» с привязкой «один ко многим» (один клиент может иметь несколько заказов). Если у меня есть какой-то код, который я хотел бы выполнить модульным тестом, который получает доступ к заказам конкретного клиента через ленивую загрузку (например, вызов customer.Orders), как я могу издеваться над заглушкой / заглушкой, чтобы она не попала в базу данных?
Edit:
Чтобы быть более понятным, давайте использовать более конкретный пример. Допустим, я хочу вернуть все заказы для конкретного клиента. Я мог бы написать это так, используя автоматически сгенерированные свойства отложенной загрузки, которые предоставляет Linq 2 Sql:
Customer customer = customerRepository.GetCustomerById(customerId);
return customer.Orders;
Однако, модульное тестирование это немного сложно. Я могу смоделировать вызов GetCustomerById, но не могу (насколько я могу судить) смоделировать вызов Orders. Единственный способ подумать о модульном тестировании - это а) подключиться к базе данных (что замедлит мои тесты и будет хрупким), или б) не использовать свойства отложенной загрузки.
Не используя свойства отложенной загрузки, я, вероятно, переписал бы вышеизложенное как это:
return orderRepository.GetOrdersByCustomerId(customerId);
Это определенно работает, но неудобно полностью игнорировать свойства отложенной загрузки просто для модульного тестирования.