知道什么导致测试失败很重要,因此我们在断言里添加失败的信息提示。
单元测试和代码重用
回看那27个测试用例,我们可以断定设置FirstName为null或者空串应该也需求同样的测试。因此我们可以扩展成:
[TestMethod]
|
1
2
3
4
|
public void Person_FirstName_Set_Empty() { Person_FirstName_Set_Invalid(String.Empty); } |
[TestMethod]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public void Person_FirstName_Set_Null() { Person_FirstName_Set_Invalid(null); } public void Person_FirstName_Set_Invalid(string firstName) { var person = new Person("Adam", "Smith"); var eventAssert = new PropertyChangedEventAssert(person); var errorsChangedAssert = new ErrorsChangedEventAssert(person); var changeAssert = new ChangeAssert(person); Assert.IsFalse(person.IsChanged, "Test setup failed, IsChanged is not false"); Assert.AreEqual("Adam", person.FirstName, "Test setup failed, FirstName is not Adam"); Assert.AreEqual("Smith", person.LastName, "Test setup failed, LastName is not Smith"); person.FirstName = firstName; Assert.AreEqual(firstName , person.FirstName, "FirstName setter failed"); Assert.AreEqual("Smith", person.FullName, "FullName not updated with FirstName changed"); Assert.IsTrue(person.IsChanged, "IsChanged flag was not set when FirstName changed"); eventAssert.Expect("IsChanged"); eventAssert.Expect("FirstName"); eventAssert.Expect("FullName"); Assert.IsTrue(person.HasErrors, "HasErrors should have remained false"); errorsChangedAssert.ExpectCountEquals(1, "Expected an ErrorsChanged event"); changeAssert.AssertOnlyChangesAre("FirstName", "FullName", "IsChanged", "HasErrors"); } |