3、反向關聯(Roundtrip)。這種模式適合于被測方法有一個可逆方法的情況下使用。它的數學證明是:f-1(f(x)) = x
下面是一段示例代碼:
[TestMethod]
public void RoundTripTest()
{
string str = "10";
//把字符串轉換為整數,然后再轉換為字符串
int i = Int32.Parse(str);
string finalString = i.ToString();
//驗證結果
Assert.AreEqual(str, finalString);
}
4、經過處理的反向關聯(Sanitized Roundtrip)。上面說的反向關聯有一個缺點,就是如果輸入的字符串為” 10″,那么就有點問題了,因為整數10轉換為字符串是不會轉換為” 10″的,這個模式的數學證明是:f-1(f(f-1(x)))=f-1(x)
以下示例可以看做是上一段代碼的加強版。
[TestMethod]
public void SanitizedRoundTripTest()
{
string str = " 10 ";
//先把字符串轉換為整數,然后把整數轉換為字符串,最后把字符串轉換為整數
int i = Int32.Parse(str);
string intermediate = i.ToString();
int roundtripped = Int32.Parse(intermediate);
//驗證結果
Assert.AreEqual(i, roundtripped);
}
5、狀態關聯。這種模式很常見,就是對于調用某個類的方法,會改變這個類內部的狀態,而這個改變可以用其他方法來間接地驗證。
一段對列表進行簡單測試的代碼:
[TestMethod]
public void InsertContains()
{
string input = "some string";
List<string> list = new List<string>();
list.Add(input);
Assert.IsTrue(list.Contains(input));
list.Remove(input);
Assert.IsFalse(list.Contains(input));
}
6、異常允許。如果需要測試異常是否在適當的時候拋出的時候,應該應用該模式。
[TestMethod,ExpectedException(typeof(IndexOutOfRangeException))]
public void ExpectedException()
{
//創建一個長度為5的數組
int[] array = new int[5];
//嘗試給該數組的第六位賦值,應該拋出IndexOutOfRangeException異常
array[6] = 1;
}
以上六種模式是單元測試中比較常見的,但并不是單元測試的全部。了解這些模式,對于平時的工作是很有幫助的。
文章來源于領測軟件測試網 http://www.kjueaiud.com/