コード内の式が正しく記述されているかどうかを判断するには、特定のコレクションで式を実行する必要があります。例として、不要なコンテキストは省略しますが、必要な場合はコメントするだけで、質問を編集して必要なものを追加します。
私が次のものを持っているとしましょう:
public interface IRepository
{
IQueryable<T> Query<T>(Expression<Func<T, bool>> expression);
}
public class Repository : IRepository
{
public IQueryable<T> Query<T>(Expression<Func<T, bool>> expression)
{
return _session.Query<T>(expression);
}
}
次のような仕様を書きたいと思います。
internal class when_executing_some_query : given_some_repository_context
{
Establish context = () =>
{
IQueryable<SomeObject> objects = new List<SomeObject>
{
SomeObject1,
SomeObject2,
SomeObject3,
}.AsQueryable();
_expectedList = new List<SomeObject>
{
SomeObject1,
SomeObject2,
};
MockedRepository.Setup(x => x.Query<SomeObject>(Moq.It.IsAny<Expression<Func<SomeObject, bool>>>)
.Callback<Expression<Func<SomeObject, bool>>>(expression => _actualExpression = expression);
}
Because of = () => _actualList = objects.Select(_actualExpression).ToList();
It should_execute_on_queryable_and_return_the_expected_items = () => //compare _expectedList with _actualList
}
Moq.It.IsAny<Expression<Func<SomeObject, bool>>>
ただし、次のように言うとビルドエラーが発生します
'Project.Domain.IRepository.Query(System.Linq.Expressions.Expression>)'に最適なオーバーロードされたメソッドの一致には、いくつかの無効な引数があります
と
引数1:「メソッドグループ」から
「System.Linq.Expressions.Expression>」に変換できません