不同的结果,我有两个操作方法,编辑和删除(包括POST)。这些方法从DB接口调用方法。这些接口方法在名为DBManager
的类中实现。在这些方法中,用户被编辑和一个布尔结果被返回,这同样适用于delete方法,返回的结果要么是真的还是假的,这取决于删除或修改是否成功与否。惩戒两个来自同一方法
现在我想嘲笑两个结果(真假),这里是我的代码,我设置了嘲笑:
//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);`
这里是我的测试代码
[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");
}
测试似乎只有当我单独运行它们时才会通过(运行一个而另一个被注释掉)。我的问题是,是否有运行的一种方式这个测试一下子,让他们通过,记得我试图测试两种不同的情况(真假)。他们说,假设是所有错误的恶魔,因为现在假的结果似乎很好地工作,然后又真实的结果将是完美的
什么参数应该表明Moq你需要返回true或false,因为目前在模拟设置中没有区别...... – kayess
@Ronny - 一种方法是设置你的模拟对象每个单元测试(每个内部测试有一个单独的设置)在排列步骤。这样你就可以确定你正在测试一个具体的设置。 另一种选择是为具体输入参数进行设置,例如, _moqDB.Setup(X => x.DeleteStaffMember(1))。返回(真),而不是It.IsAny <...>。 – peev
@ kayess,我不确定我是否在这里正确地关注你,但是例如,StaffID 1的用户不存在,所以编辑应该失败,因为具有staffID 887的用户确实存在,所以我期待通过结果,就像我在单独运行测试方法时所说的那样(在评论其他测试方法时),他们似乎完全像我希望的那样工作。我可能错过了一些东西 – Ronny