Это немного искусственно для устройства , чтобы проверить это, поскольку каждый поставщик LINQ зависит от реализации. Вы можете использовать различные подходы в своем тесте, и он просто не расскажет вам ничего о реальной реализации. Например, если это макет через LINQ-to-Objects, я мог бы использовать:
List<Animal> = myAnimalRepository.Find(x => CheckSpecies(x, "Cat"));
...
static bool CheckSpecies(Animal animal, string species) {
return animal.Species == species;
}
Это будет работать с LINQ-to-Objects ... но только с LINQ-to-Objects. Аналогично, использование UDF (или одного из вспомогательных методов SQL) будет работать в LINQ-to-SQL, но не в Entity Framework.
Я пришел к выводу, что для этого сценария полезны только интеграционные тесты, поэтому нет; насмешка не очень полезна . Это даст вам теплое чувство счастья, что вы сделали что-то полезное, но в конечном итоге это не проверяет, будет ли работать то, что вы пишете в своем приложении.
Еще лучший подход, IMO, - не выставлять это через интерфейс вашего хранилища. Если вы ограничиваете запросы LINQ уровнем данных, вы устраняете риск, и теперь вы тестируете (/ mocking) чистый, предсказуемый интерфейс.
Я обсуждаю это подробнее здесь .