J'ai deux méthodes d'action, modifier et supprimer (les deux post). Ces méthodes invoquent des méthodes d'une interface de base de données. Ces méthodes d'interface sont implémentées dans une classe appelée DBManager
. Dans ces méthodes, un utilisateur est édité et un résultat booléen est renvoyé, même chose pour la méthode de suppression, le résultat retourné sera soit vrai soit faux, selon que la suppression ou l'édition a été un succès ou non.Mocking deux résultats différents de la même méthode
Maintenant, je veux moquer les deux résultats (vrais et faux), voici mon code où je configurer les simulacres:
//setup passed test
_moqDB.Setup(md => md.EditStaff(It.IsAny<StaffEditViewModel>())).Returns(true);
//setup failed test
_moqDB.Setup(md => md.EditStaff(It.IsAny<StaffEditViewModel>())).Returns(false);
//Setup Delete method test
_moqDB.Setup(x => x.DeleteStaffMember(It.IsAny<int>())).Returns(true);
//delete failed
_moqDB.Setup(x => x.DeleteStaffMember(It.IsAny<int>())).Returns(false);`
Voici mon code d'essai
[TestMethod]
public void PostUpdatedUserTest()
{
var staffEdit = new StaffEditViewModel()
{
BranchID = "HQ",
SiteID = "TestingSite",
StaffEmail = "[email protected]",
StaffID = 887,
StaffNameF = "TestUser",
StaffNameS = "TestSurname",
StaffPassword = "****",
StaffSecurity = UserRoles.Administrator
};
//Act
var result = _userController.Edit(staffEdit);
//Assert
Assert.IsNotNull(result);
Assert.IsInstanceOfType(result, typeof(RedirectToRouteResult));
var redirectResult = result as RedirectToRouteResult;
Assert.AreEqual("Index", redirectResult.RouteValues["action"]);
}
[TestMethod]
public void PostUpdatedUserFailTest()
{
var staffEdit = new StaffEditViewModel()
{
BranchID = "HQ",
SiteID = "TestSite",
StaffEmail = "[email protected]",
StaffID = 1,
StaffNameF = "Test1",
StaffNameS = "TestSurname",
StaffPassword = "****",
StaffSecurity = UserRoles.Administrator
};
//Act
var result = _userController.Edit(staffEdit) as ViewResult;
// Assert
Assert.IsNotNull(result);
Assert.IsTrue(string.IsNullOrEmpty(result.ViewName) || result.ViewName == "Error");
}
Les tests semble passer seulement quand je les lance individuellement (courir un pendant que l'autre est commenté). Ma question est la suivante: existe-t-il un moyen de faire passer tous ces tests en même temps et de les faire passer? N'oubliez pas que j'essaie de tester deux scénarios différents (vrai et faux). Ils disent que l'hypothèse est le diable de tous les bugs, maintenant je ne peux pas supposer juste parce que le résultat faux semble bien fonctionner alors aussi le vrai résultat sera parfait
Quels paramètres devraient indiquer que vous devez retourner true ou false, car il n'y a actuellement aucune différence dans la configuration fictive ... – kayess
@Ronny - Une façon est de configurer votre objet maquette par test unitaire (à l'intérieur de chaque test pour avoir une configuration séparée) dans l'étape organiser. De cette façon, vous serez sûr de tester une configuration concrète. L'autre option consiste à configurer les paramètres d'un paramètre d'entrée concret, par ex. _moqDB.Setup (x => x.DeleteStaffMember (1)). Renvoie (true) au lieu de It.IsAny <...>. – peev
@kayess, je ne suis pas sûr si je vous suis correctement ici, mais par exemple l'utilisateur avec StaffID 1 n'existe pas alors l'édition devrait échouer, donc comme l'utilisateur avec staffID 887 existe, je m'attends à un résultat de réussite , comme je l'ai dit quand je cours la méthode de tests individuellement (en commentant l'autre), ils semblent fonctionner exactement comme je le veux. Suis-je peut-être manquer quelque chose – Ronny