私はmoqを使ってテストしていますが、私は正しくモックすることができないという問題に遭遇しました。 これは私のリポジトリクラスです:MOQの問題 - mockedクラスが不正なデータを返す
public interface IAccountsRepository
{
IQueryable<Account> Accounts { get; }
IQueryable<Account> AccountsPaged(int pageSize, int selectedPage);
}
これは実装(偽)のいずれかです。
public class FakeAccountsRepository : IAccountsRepository
{
private static readonly IQueryable<Account> FakeAccounts = new List<Account> {
new Account {RegistrationEmail = "[email protected]"},
new Account {RegistrationEmail = "[email protected]"},
new Account {RegistrationEmail = "[email protected]"},
new Account {RegistrationEmail = "[email protected]"},
new Account {RegistrationEmail = "[email protected]"}
}.AsQueryable();
public IQueryable<Account> Accounts
{
get { return FakeAccounts; }
}
public IQueryable<Account> AccountsPaged(int pageSize, int selectedPage)
{
return FakeAccounts.Skip((selectedPage - 1)*pageSize).Take(pageSize).AsQueryable();
}
}
これは実ページと偽物やSQLのデータ(IOC)と完璧に動作コントローラの定義です実際のWebページ内:
:public class AccountsController : Controller
{
private IAccountsRepository _accountsRepository;
public int PageSize = 3;
public AccountsController(IAccountsRepository accountsRepository)
{
this._accountsRepository = accountsRepository;
}
public ViewResult List(int selectedPage)
{
return View(_accountsRepository.AccountsPaged(PageSize, selectedPage).ToList());
}
}
これはMOQの方法であり、
それはリストのページネーションのこの実装で正常に動作します:
public ViewResult List(int selectedPage)
{
return View(_accountsRepository.Accounts.Skip((selectedPage - 1) * PageSize).Take(PageSize).ToList());
}
が、これを使用している場合、それは失敗します。
public ViewResult List(int selectedPage)
{
return View(_accountsRepository.AccountsPaged(PageSize, selectedPage).ToList());
}
テストを変更するだけList実装を変更せずに(のみ.Accountsに改ページをしています)それはすべて動作しますが、AccountsPagedメソッドを使用しようとすると、要素を返しません。 実際の使用では、Webページ上では両方向で動作します。
ご連絡ください、ありがとうございます。
EDIT: 私はこれを行う場合:今は:
mockProductsRepos.Setup(x => x.AccountsPaged(Moq.It.IsAny<int>(), Moq.It.IsAny<int>())).Returns(accs.AsQueryable());
を私は5つの項目は、あなたがあなたのモック
EDITでセットアップAccountsPaged方法はなかった代わりに、2
私は上記の記事に追加したように、今セットアップしましたが、2つではなく5つのアイテムを提供します。これは、.List()呼び出しが正しく機能すると予想されます。私はそれがどのようになることができ、なぜそれが正会員を返すのか分からない。 moqの設定をステップバイステップで進める方法はありますか? – BuzzBubba