リポジトリインターフェイスに次のメソッドがあります。
IQueryable<T> GetQuery<T>(Expression<Func<T, bool>> predicate) where T : class;
次のコンストラクターを使用した単体テストで実行するクラスがあります。
public MyClass(IUnitOfWork unitOfWork)
インターフェイスIUnitOfWork
には、公開されたリポジトリプロパティがあります。
Repository Repository { get; }
だから私は次のMyClass.DoSomething()
ようにメソッドをユニットテストしようとしています:
[TestInitialize]
public void Setup()
{
accounts = new List<Account>()
{
new Account()
{
Id = 123
}
};
}
次に、Arrange
失敗しているユニットテストセクションがあります。
//Arrange
var repositoryMock = new Mock<IUnitOfWork>();
repositoryMock.Setup(x => x.Repository.GetQuery<Account>(y => y.Id == 123))
.Returns(accounts.AsQueryable()); //This setup always fails
var myClass = new MyClass(repositoryMock.Object); //don't even get here
私が得る例外は次のとおりです。
System.NotSupportedException:非仮想(VBでオーバーライド可能)メンバーの無効なセットアップ:x => x.Repository.GetQuery(y => y.Id == 123)
私はSetup
モックの他のバリエーションを試しました:
repositoryMock.Setup(x => x.Repository.GetQuery<Account>()).Returns((Account a) => accounts.AsQueryable().Where(z => z.Id == 123));
と
repositoryMock.Setup(x => x.Repository.GetQuery<Account>(y => y.Id == 123)).Returns((Account a) => accounts.AsQueryable().Where(z => z == a));
しかし、成功しませんでした。毎回同じ例外が発生します。単体テストを実行すると、常に同じ例外がスローされます。嘲笑されるインターフェイスを使用しているのに、なぜこの例外が発生するのですか、またこれを適切に行うにはどうすればよいですか?ありがとう!