1

私は汎用リポジトリをモックしており、Retrieve メソッドに 2 番目の引数を追加して、オブジェクト プロパティのインクルード文字列を渡すことができるようにしました。これをモックする方法に少し行き詰まり、TargetParameterCountException.

誰かが私を正しい方向に向けることができれば、それは素晴らしいことです.

インターフェース:

IQueryable<T> Retrieve(Expression<Func<T, bool>> predicate);

IQueryable<T> Retrieve(Expression<Func<T, bool>> predicate, IEnumerable<string> includes);

モク:

var mActionRepository = new Mock<IRepository<ContainerAction>>();
mActionRepository.Setup(m => m.Retrieve(It.IsAny<Expression<Func<ContainerAction, bool>>>()))
    .Returns<Expression<Func<ContainerAction, bool>>>(queryable.Where);

mActionRepository.Setup(m => m.Retrieve(It.IsAny<Expression<Func<ContainerAction, bool>>>(), It.IsAny<IEnumerable<string>>()))
    .Returns<Expression<Func<ContainerAction, bool>>>(queryable.Where);

最初の Moq は機能しましたが、2 番目の Moq は機能しませんでした。

4

1 に答える 1

1

Returnsメソッドでは、モックされたメソッドのすべての引数タイプをジェネリック引数として指定する必要があります。

したがってIEnumerable<string>、2 番目のReturns呼び出しで が欠落しているため、 が取得されますTargetParameterCountException

したがって、2番目Returnsは次のようになります。

mActionRepository.Setup(m => m.Retrieve(
    It.IsAny<Expression<Func<ContainerAction, bool>>>(), 
    It.IsAny<IEnumerable<string>>()))
    .Returns<Expression<Func<ContainerAction, bool>>, IEnumerable<string>>(
        (predicate, includes) => queryable.Where(predicate));
于 2013-07-03T11:24:29.187 に答える