5

ジェネリックコントローラーをテストするためのジェネリックテストクラスを作成しようとしています。これ以外はすべて正常に機能しています。次のような方法があります。

private T GetSingle(Expression<Func<T, bool>> expression)

私は次のようにテストを設定しようとしています:

var Guids = new[] { Guid.NewGuid(), Guid.NewGuid() };
var items = Guids.Select(x => new T {Id = x});
var mock = new Mock<IRepository<T>>();
mock.Setup(m => m.GetSingle(
    It.IsAny<Expression<Func<T, bool>>>()))
   .Returns(new T());

そして、次のようにテストを実行します。

var value = Repository.GetSingle(x=> x.Id == Guid.NewGuid());

これは常に新しいTを返します。

私の設定は間違っていますか?

4

1 に答える 1

9

new T()提供された式に関係なく、いつでもGetSingle呼び出されるのとまったく同じインスタンス(この場合は)を返すようにMoqに指示しています。実際に必要なのは、次に対してその式を呼び出すことですitems

mock.Setup(m => m.GetSingle(It.IsAny<Expression<Func<T, bool>>>()))
   .Returns<Expression<Func<T, bool>>>(expression => items.AsQueryable().Single(expression));
于 2012-11-16T22:36:47.437 に答える