我想測試一個名爲Login的方法,當用戶和密碼參數正確時,設置兩個會話變量和三個cookie的值,最後返回true。在這個測試中是否有多個斷言錯誤?
我一直在閱讀關於單元測試的幾篇文章,但不知何故,這並沒有讓我的案例完全清楚。我知道每個單元測試應該只有一個斷言,儘管只要測試一個「邏輯概念」就可以使用多個測試。
只有當它正確設置每個會話變量和cookie並返回預期值時,登錄方法纔是正確的,因此我不確定是否可以一次檢查所有這些值(這會導致我使用六個在單元測試中斷言,我認爲有點骯髒),或者我應該在不同的測試中分別檢查每個會話變量和cookie的值。
[TestMethod()]
public void SuccessfulLoginTest()
{
// Arrange.
String username = "foo";
String password = "correct password";
Boolean remember = true;
// Act.
Boolean actual = Login(username, password, remember);
// Assert.
Assert.IsTrue(actual);
Assert.AreEqual("foo", HttpContext.Current.Session["Username"]);
Assert.AreEqual(1, HttpContext.Current.Session["Group"]);
Assert.AreEqual("foo", HttpContext.Current.Response.Cookies["Username"].Value);
Assert.AreEqual("en", HttpContext.Current.Response.Cookies["Lang1"].Value);
Assert.AreEqual("es", HttpContext.Current.Response.Cookies["Lang2"].Value);
}
看起來不錯! – Heinzi
這個想法,每個測試用例應該只有一個斷言[是愚蠢的](http://stackoverflow.com/a/20300843/545127)。 – Raedwald