I have two action methods, edit and delete(both post). These methods invoke methods from a DB interface. These interface method are implemented in a class called DBManager. In these methods a user gets edited and a boolean results is returned, same goes for the delete method, the returned result will either be true or false, depending on whether the deletion or edit was a success or not.
Now I want to mock the two results(true and false), here is my code where I setup the mocks:
//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);`
Here is my testing code
[TestMethod]
public void PostUpdatedUserTest()
{
var staffEdit = new StaffEditViewModel()
{
BranchID = "HQ",
SiteID = "TestingSite",
StaffEmail = "Zandile.Mashele@avisbudget.co.za",
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 = "Zandile.Mashele@avisbudget.co.za",
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");
}
The tests seems to pass only when I run them individually(run one while the other is commented out). My question is, is there a way of running this tests all at once and have them pass, remember I am trying to tests two different scenarios(true and false). They say assumption is the devil of all bugs, now I cannot assume just because false result seems to work fine then also the true result will be perfect