不同的結果,我有兩個操作方法,編輯和刪除(包括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