Also, ich benutze Moq zum Testen, aber ich stieß auf ein Problem, das mich davon abhält, richtig zu verspotten, zumindest denke ich. Das ist meine Repository-Klasse:MOQ-Problem - Mocked-Klasse gibt falsche Daten zurück
public interface IAccountsRepository
{
IQueryable<Account> Accounts { get; }
IQueryable<Account> AccountsPaged(int pageSize, int selectedPage);
}
Dies ist eine der Implementierungen ist (fake):
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();
}
}
Dies ist eine Controller-Definition ist, die perfekt mit realer Seite und gefälschten oder SQL-Daten (IOK) funktioniert in einer echten Web-Seite:
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());
}
}
Dies ist eine moq Methode:
es funktioniert gut mit dieser Implementierung der Liste Paginierung:
public ViewResult List(int selectedPage)
{
return View(_accountsRepository.Accounts.Skip((selectedPage - 1) * PageSize).Take(PageSize).ToList());
}
aber es funktioniert nicht, wenn dies mit:
public ViewResult List(int selectedPage)
{
return View(_accountsRepository.AccountsPaged(PageSize, selectedPage).ToList());
}
Ohne Test verändert und nur Liste Implementierung zu ändern (tun Paginierung nur auf .Accounts) es funktioniert alles, aber wenn ich versuche, die Methode "AccountsPaged" zu verwenden, schlägt es fehl, keine Elemente zurückzugeben. In der Praxis, auf einer Webseite, funktioniert es in beide Richtungen.
Bitte beraten, danke.
EDIT: Wenn ich dies tun:
mockProductsRepos.Setup(x => x.AccountsPaged(Moq.It.IsAny<int>(), Moq.It.IsAny<int>())).Returns(accs.AsQueryable());
ich 5 Artikel
Ich habe es jetzt eingerichtet, wie ich dem Beitrag oben hinzugefügt habe, aber es gibt mir 5 Elemente anstelle von 2 - was erwartet würde, wenn .List() Anruf ordnungsgemäß funktioniert. Ich weiß nicht, wie es sein könnte und warum gibt es wieder volle Mitglieder? Gibt es eine Möglichkeit, das Moq-Setup Schritt für Schritt zu debuggen? – BuzzBubba