各 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 ヘルパー メソッドの 1 つ) は LINQ-to-SQL では機能しますが、Entity Framework では機能しません。
このシナリオでは統合テストのみが役立つという結論に達したので、いいえ。ここでは嘲笑はあまり役に立ちません。何か役に立つことをしたという温かい幸せな気持ちになりますが、最終的には、アプリに書いたことが機能するかどうかをテストすることはできません。
さらに優れたアプローチである IMO は、リポジトリ インターフェイスを介してそのようなものを公開しないことです。LINQ クエリをデータ層に制限すると、リスクがなくなり、純粋で予測可能なインターフェイスをテスト (/モック) することになります。
これについては、ここで詳しく説明します。