我想测试一个名为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