測試框架nunit之assertion斷言應用詳解。本站提示廣大學習愛好者:(測試框架nunit之assertion斷言應用詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是測試框架nunit之assertion斷言應用詳解正文
任何xUnit對象都應用斷言停止前提的斷定,NUnit天然也不破例,與其它的xUnit(如Junit、phpUnit、pythonUnit)比擬,因為年夜量應用了Generic、Attribute等說話特點,NUnit供給了更加方面、靈巧的測試辦法,上面先引見一下斷言。
Nunit一共有四個類斷言類,分離是Assert、StringAssert、FileAssert和DirectoryAssert,它們都在NUnit.Framework定名空間,個中Assert是經常使用,也是我們最熟習的,而別的三個斷言類,望文生義,分離對應於字符串的斷言、文件的斷言和目次的斷言,實際上,僅Assert類便可以完成一切前提的斷定,但是,假如公道的應用前面的三個斷言,將使代碼加倍簡練、雅觀,也加倍便於懂得和保護。
一:Assert類
關於我們平日的單位測試代碼,Assert類中的靜態辦法便可以完成,個中年夜家最熟習的應當是Assert. AreEqual()辦法,其實,除AreEqual,NUnit還供給了浩瀚的比擬方法,知足分歧的代碼請求。
1:相等/不相等斷定
AreEqual:斷定兩個值相等
AreNotEqual:斷定兩個值不相等
示例:
Int a=1
Assert.AreEqual(a,1);//經由過程斷定
Assert.AreEqual(a,2);//不克不及經由過程斷定
留意,除AreEqual/ AreNotEqual,上面簡直一切的辦法都支撐多態(多種數據類型),和多參數,除常常應用的Assert .AreEqual(int a,int b),還有一種典范的參數情勢:
Assert.AreEqual(int a,int b,string message);
或許 Assert.XXX(int a,int b,string message);
個中第三個參數是前提欠亨過時輸入的信息,以便於毛病的定位
關於double和decimal類型,這兩個辦法還支撐比擬時的浮點誤差
例如以下代碼:
double a = 1.1;
double b = 1.11;
double c = 0.1;
Assert.AreEqual(a, b, c);//經由過程斷定
c=0.01;
Assert.AreEqual(a, b, c);//不克不及經由過程斷定
2:類的斷定
AreSame:斷定兩個對象相等
AreNotSame:斷定兩個對象不相等
Contains:斷定能否能否某對象
示例:
List<string> list = new List<string>();
list.Add("a");
list.Add("b");
Assert.Contains("a", list); //經由過程斷定
Assert.Contains("aa", list); //不克不及經由過程斷定
3:前提斷定
IsTrue:斷定前提為真
True:同上
IsFalse:斷定前提為假
False:同上
IsNull:斷定能否為空
Null:同上
IsNotNull:斷定不為空間
NotNull:同上
IsNaN:斷定數值是Nan
IsEmpty/IsNotEmpty:斷定字符串能否為空/不為空
IsEmpty/IsNotEmpty:斷定聚集能否為空/不為空
示例:
int a=100;
Assert. IsTrue(a==100);//經由過程斷定
Assert. True(a==100);//經由過程斷定
4:比擬斷定
Greater:年夜於
GreaterOrEqual:年夜於等於
Less:小於
LessOrEqual:小於年夜於
示例:
int a = 100;
Assert.Greater(a, 99);
Assert.GreaterOrEqual(a, 100);
5:類型斷定
IsInstanceOfType/ IsNotInstanceOfType:是/不是某個類的實例(從2.5以後支撐泛型)
例如:
public class Person
{
public string name {set;get;}
}
Person p = new Person();
p.name = "a";
Assert.IsInstanceOf(typeof(Person), p);//經由過程斷定
Assert.IsInstanceOf(typeof(System.String), p);//不克不及經由過程斷定
6:異常斷定
Throws:應當拋出某類型的異常
DoesNotThrow:不該該拋出某類型的異常
7:其它經常使用的辦法
Pass:強行讓測試經由過程
Fail:強行讓測試掉敗
Ignore:疏忽該測試辦法
Inconclusive:未驗證該測試
二:StringAssert類
StringAssert用於String類型的斷言斷定:
StringAssert.Contains:能否包括子串
StringAssert.StartsWith:能否以某子串開首
StringAssert.EndsWith:能否以某子串開頭
StringAssert.AreEqualIgnoringCase:兩個字符串能否在不辨別年夜小寫時相等
StringAssert.IsMatch:能否婚配,(應用正則表達式停止字符串比擬)
示例:
string s1 = "abc";
StringAssert.Contains("b", s1);
StringAssert.StartsWith("a", s1);
StringAssert.EndsWith("c", s1);
string s2 = "aBc";
StringAssert.AreEqualIgnoringCase(s1, s2);
StringAssert.IsMatch("[a|book]", "123");
三:CollectionAssert類
AllItemsAreInstancesOfType:聚集中的各項能否是某某類型的實例
AllItemsAreNotNull:聚集中的各項均不為空
AllItemsAreUnique:聚集中的各項獨一
AreEqual:兩個聚集相等
AreEquivalent:兩個聚集相當
AreNotEqual:兩個聚集不相等
AreNotEquivalent:兩個聚集不相當
DoesNotContain:聚集中不包括某對象
IsSubsetOf:一個聚集是別的一個聚集的子集
IsNotSubsetOf:一個聚集不是別的一個聚集的子集
IsEmpty:聚集為空
IsNotEmpty:聚集不為空
IsOrdered:聚集的各項曾經排序
示例:
List<int> a = new List<int>();
List<int> b = new List<int>();
CollectionAssert.IsEmpty(a);
for (int i = 1; i <= 10; i++)
{
a.Add(i);
b.Add(i);
}
CollectionAssert.AreEqual(a, b);
CollectionAssert.IsOrdered(a);
b.Remove(1);
CollectionAssert.IsSubsetOf(b, a);
CollectionAssert.AreEqual(a, b);