0

汎用リポジトリを Moq しようとしています。次のような SingleOrDefaultInclusive というメソッドがあります。

T SingleOrDefaultIncluding(Expression<Func<T, bool>> wherePredicate, params Expression<Func<T, object>>[] includes);

単体テストでは、次のように Moq を設定しました。

 _agreementRepositoryMock.Setup(m => m.SingleOrDefaultIncluding
                                                (
                                                    It.IsAny<Expression<Func<Agreement, bool>>>(),
                                                    It.IsAny<Expression<Func<Agreement, object>>>(),
                                                    It.IsAny<Expression<Func<Agreement, object>>>()
                                                )
            ).Returns(AgreementMocks.GetOne());

どうにかして、SingleOrDefaultInclude に渡されたすべてのパラメーターが自分の同意書を返すように指定できますか? これを機能させるには、テストしているメソッドのように、正確に 3 つのパラメーターを渡す必要があります。または、どういうわけか配列を Moq に渡すことはできますか?

4

1 に答える 1

1

たぶん、「展開」しないフォームを使用しますparamsか?何かのようなもの:

_agreementRepositoryMock.Setup(m => m.SingleOrDefaultIncluding
  (
    It.IsAny<Expression<Func<Agreement, bool>>>(),
    It.IsAny<Expression<Func<Agreement, object>>[]>()
  )
  ).Returns(AgreementMocks.GetOne());

上記に注意してください[]。未テスト。

誤解した場合に備えて、パラメーターの数を固定するには、次のことを試してください。

_agreementRepositoryMock.Setup(m => m.SingleOrDefaultIncluding
  (
    It.IsAny<Expression<Func<Agreement, bool>>>(),
    It.Is<Expression<Func<Agreement, object>>[]>(array => array.Length == 2)
  )
  ).Returns(AgreementMocks.GetOne());

It.Is<>ではなく使用してIt.IsAny<>ください。

于 2013-09-18T11:53:26.623 に答える