久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

API 測試 (6)

 liuchangxin81 2014-09-19

判定測試用例通過與否

 

問題

 

      如何判定API測試用例是否通過還是失敗,。

 

設(shè)計(jì)

 

      調(diào)用待測方法,傳給它測試用例的輸入,,得到返回值,,然后比較實(shí)際結(jié)果從測試用例中讀入的期望結(jié)果是否一致。

 

方案

 

string method,expected;

double actual = 0.0;

if(method == "ArithmeticMean")

{

      actual = MathLib.Methods.ArithmeticMean(input);

      if(actual.ToString("F4") == expected)

            Console.WriteLine("Pass");

      else

            Console.WriteLine("*FAIL*");

}

else

{

      Console.WriteLine("Method not recognized");

}

 

注解

 

      從測試用例讀入數(shù)據(jù)之后,,需要解析這些數(shù)據(jù),,然后把測試用例輸入轉(zhuǎn)換成合適的數(shù)據(jù)類型,接下來就可以啟用待測方法。為了讓測試套件能夠調(diào)用待測方法,,則必 須為測試套件加上一個(gè)工程引用,,用以引用待測方法所在的DLL(本例中即MathLib)。上述代碼首先檢查這些數(shù)據(jù)要傳給的是哪個(gè)方法,。在.NET環(huán)境 中,,存在靜態(tài)方法和實(shí)例方法。ArithmeticMean()是一個(gè)靜態(tài)方法,,因此,,只要使用它的類名稱作為上下文就可以直接調(diào)用它,然后把整數(shù)數(shù)組作 為輸入?yún)?shù)傳給它,,并且把返回結(jié)果存儲(chǔ)到double型的actual變量,。接下來,將通過方法調(diào)用得到的返回值與期望的返回值(由測試用例數(shù)據(jù)提供)進(jìn) 行比較,。國為期望結(jié)果是string類型,,而實(shí)際結(jié)果是double類型,所以必須把它們中的一個(gè)進(jìn)行類型轉(zhuǎn)換,。在這里,,將實(shí)際結(jié)果轉(zhuǎn)成成小數(shù)點(diǎn)后有4位 的string類型。其目的是為了和期望結(jié)果的格式相匹配,。如果選擇把期望結(jié)果轉(zhuǎn)換成double類型,,

if(actual == double.Parse(expected))

      Console.WriteLine("Pass");

else

      Console.WriteLine("*FAIL*);

 

那么最終比較的就是兩個(gè)double值是否相等,但這是有問題的,,因?yàn)閐ouble類型和float類型都只是近似值,。通常的原因是:除了像本例中這樣處理double或float的情況,其他情況下都應(yīng)該把期望結(jié)果從string類型轉(zhuǎn)換成合適的類型,。

 

      GeometricMean()是一個(gè)實(shí)例方法,,所以在調(diào)用之前,必須實(shí)例它一個(gè)MathLib.Methods對(duì)象,,然后通過這個(gè)對(duì)象來調(diào)用GeometricMean(),,如果實(shí)際結(jié)果與期望結(jié)果一致,則測試用例通過,,可以在控制臺(tái)上打印一條信息:

 

if(method == “GeometricMean")

{

      MathLib.Method m = new MathLib.Methods();

      actual = m.GeometricMean(input);

      if(actual.ToString("F4") == expected)

            Console.WriteLine("Pass");

      else

            Console.WriteLine("*FAIL*");

}

 

      通常還會(huì)希望在輸入信息加上一些額外的信息,,比如測試用例ID:Console.WriteLine(caseID + " Pass");

      如果測試用例失敗,則通常需要打印出實(shí)際值和期望值以便診斷失敗的原因,,例如:

Console.WriteLine(caseID + " *FAIL* " + method + " actual = " + actual.ToString("F4") + " expected = "+ expected);

 

      編寫API測試時(shí),,必須要回答一個(gè)設(shè)計(jì)問題,每個(gè)輕量級(jí)的測試套件要測試多少個(gè)方法,?許多情況下,,我們都會(huì)為每一個(gè)待測方法寫一個(gè)測試套件,;但是,也可以 在一個(gè)測試套件里測試多個(gè)方法,。例如,,為了測試ArithmeticMean()和GeometricMean()方法,則可以將兩者的測試用例數(shù)據(jù)合并 到一個(gè)文件里,。

0001:ArithmeticMean:2 4 8:4.6667

0002:ArithmeticMean:1 5 :3.0000

0004:GeometricMean:1 2 4 8 16 32:6.6569

0006:GeometricMean:2 4 8:4.0000

     

      接下來可以修改測試套件的邏輯結(jié)果,,用待測方法的名稱來區(qū)分各個(gè)分支:

if(method = "ArithmeticMean")

{

      //用于測試ArithmeticMean方法的代碼

}

else if(method = "GeometricMean")

{

      //用于測試GeometricMean方法的代碼

}

else

{

      Console.WriteLine("Unknown method");

}

 

      是否需要把多個(gè)方法合并在一個(gè)測試套件里進(jìn)行測試通常取決于這些方法的簽名是否接近。如果像在配合中一樣(兩個(gè)方法都接受一組整數(shù)作為參數(shù)并且返回一個(gè) double值),,方法的簽名都非常接近,,那么把它們合在一起測試就可以節(jié)省一些時(shí)間。如果方法簽名相差很大,,那最好還是分開寫單獨(dú)的測試套件,。

 

      測試API方法的時(shí)候,必須要考慮待測方法是無狀態(tài)的(stateless)還是有狀態(tài)的(stateful),。大多數(shù)API方法都是無狀態(tài)的,,也就是說 各個(gè)調(diào)用之間是相互獨(dú)立的?;蛘邠Q種說法,,調(diào)用無狀態(tài)的方法,如果給定的輸入一樣,,那么每次產(chǎn)生的結(jié)果都是一樣。有時(shí)候我們會(huì)說無狀態(tài)的方法沒有記憶功 能,。另一方面,,這些方法是有狀態(tài)的,也就是說,,同一組輸入每次產(chǎn)生的返回結(jié)果可能會(huì)有所不同,。例如,假設(shè)有一個(gè)方法是用來產(chǎn)生Fibonacci數(shù)列的,, 它返回前面兩個(gè)整數(shù)結(jié)果的加和,。因此第一次和第二次調(diào)用返回1,第三次調(diào)用返回2,,第四次調(diào)用返回3,,每5次調(diào)用返回5,等等,,依此類推,,當(dāng)測試有狀態(tài)的 方法的時(shí)候,必須砍測試套件的邏輯符合待測方法的狀態(tài)變化,。

 

      測試套件必須能夠訪問待測的API方法,。大多數(shù)情況下,,應(yīng)該把包含這些API方法的DLL作為一個(gè)工程引用添加到測試程序。但是,,有些情況下,,則需要把待 測方法的代碼拷貝到測試套件里。當(dāng)測試一個(gè)么有的輔助方法時(shí),,這么做是有必要的(假設(shè)你不想把該方法的訪問權(quán)限從private改成public),。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多