Je rencontre un comportement étrange dans Moq - malgré le fait que je configure un objet simulé pour agir d'une certaine manière, puis j'appelle la méthode exactement De la même manière dans l'objet que je suis en train de tester, il réagit comme si la méthode n'avait jamais été appelée.L'attente sur Mock Object ne semble pas être satisfaite (Moq)
je l'action du contrôleur suivant que je suis en train de tester:
public ActionResult Search(string query, bool includeAll)
{
if (query != null)
{
var keywords = query.Split(' ');
return View(repo.SearchForContacts(keywords, includeAll));
}
else
{
return View();
}
}
Mon code de test unitaire:
public void SearchTestMethod() // Arrange
var teststring = "Anders Beata";
var keywords = teststring.Split(' ');
var includeAll = false;
var expectedModel = dummyContacts.Where(c => c.Id == 1 || c.Id == 2);
repository
.Expect(r => r.SearchForContacts(keywords, includeAll))
.Returns(expectedModel)
.Verifiable();
// Act
var result = controller.Search(teststring, includeAll) as ViewResult;
// Assert
repository.Verify();
Assert.IsNotNull(result);
AssertThat.CollectionsAreEqual<Contact>(
expectedModel,
result.ViewData.Model as IEnumerable<Contact>
);
}
où AssertThat
est juste une classe de moi-même avec un tas de helpers d'assertion (puisque la classe Assert
ne peut pas être étendue avec des méthodes d'extension ... soupir ...).
Quand je lance le test, il échoue sur la ligne repository.Verify()
, avec un MoqVerificationException
:
Test method MemberDatabase.Tests.Controllers.ContactsControllerTest.SearchTestMethod() threw exception: Moq.MockVerificationException: The following expectations were not met: IRepository r => r.SearchForContacts(value(System.String[]), False)
Si je retire repository.Verify()
, l'assertion de collecte ne me dit que le modèle est retourné null
. J'ai débogué et vérifié que query != null
, et que je suis pris dans la partie du bloc if
où le code est exécuté. Aucun problème là-bas.
Pourquoi cela ne fonctionne-t-il pas?
Merci! Cela a fait le tour imméditement! =) Il semble que je doive lire sur le Moq, et plus particulièrement sur quand et comment utiliser le It ... construit. –