2012-02-28 59 views
6

我對單元測試還很陌生,但我完全瞭解測試執行特定可測試任務的代碼的單個單元的想法,但是,我處於一個位置,需要編寫測試,並對作用於超過50個屬性的對象的方法輸出的準確性提供信心。這些屬性的值的組合產生基於從規則定義對象(使用lambda表達式)注入的規則的輸出,其實質上等同於百分比。這些輸出百分比是「關鍵任務」,並且之前已經過相當長時間的測試,例如規則定義類的質量(每個規則的所有可歸屬百分比合計達到100%),但是對象的實際屬性沒有是。有很多屬性的對象的單元測試建議

「數據」對象來自數據庫,但我當然可以嘲笑它。我的問題是需要嘲笑的數據排列的數量以及爲確保數據x,y,z(乘以50奇數指數)感覺幾乎不可能而需要寫入的測試數量。

所以,問題是,這些情況如何在真實意義上進行測試。基於已知「正確」狀態的腳本測試和「正確」結果甚至可能/明智嗎?單元測試是否適用於這種情況,如果不是,還有什麼替代方法。

順便說一下,這是遺留代碼,這裏有一個很小的重構機會,但前提是我可以在幾天的時間尺度內保證精度等同時執行重構和測試!

+1

大聲笑 - 你能相信寫在我的iPhone?該死的你預測文字。當我在前面有一個真正的鍵盤時,將語法排序:) – 2012-02-28 19:38:20

+2

@ S.Lott我們也可以嘗試不要對錯別字進行肛門分析,不是嗎?在那裏,我糾正了它。 ;) – weltraumpirat 2012-02-28 19:46:43

+1

哎呀夥計,過分苛刻恕我直言 – 2012-02-28 19:50:54

回答

4

我想你自己給你的答案的一半:

這些屬性的值的組合產生基於規則輸出 從規則定義對象注入(使用lambda表達式 )基本上相當於一個百分比。

在當前的單元測試,你會嘲諷無論是數據和規則。因此,您只需確保輸入和輸出方法的行爲正確。

測試規則是一個不同的任務。我只能猜測,但通常情況下,您將擁有一個Excel表格或類似的可能的輸入和輸出值來指定此規則的要求。我會將同一個錶轉換爲可讀的(csv)格式,並直接使用它來驅動規則的單元測試。

2

嗯,我不知道你在用什麼語言工作,但是在查看你的個人資料後,我想.NET可能會涉及到。

如果我是對這個問題,我會建議使用數據驅動測試。 MSDN提供了一個短期快速啓動,這讓我非常多的骰子:How to: Create a Data-Driven Unit Test 自從我看了這篇文章我startetd發明一種新的變化在每一個新項目中使用...

這些DDT在Visual Studio工作使您能夠將測試數據存儲爲XML,CSV或存儲在數據庫表中。也許你可能編寫一些代碼來生成插入測試的必要值。

第二個建議是Microsoft的Pex and Moles項目分析您的系統,並在此基礎上自動生成測試數據以查找更極端的測試用例。

3

如果是試圖生成測試用例的大量組合,您可以看看all-pair測試

我們已經使用微軟PICT成功地減少測試用例的同時仍然有一定信心的量已多數情況下覆蓋。

摘要

舉例來說,如果你想創建一個測試套件分區和 卷創建的域可以通過以下 參數描述:類型,大小,文件系統,格式化方法,簇大小和 壓縮。每個參數具有有限數量的可能值,其中每個參數都由其性質決定(例如,壓縮 只能打開或關閉)或作爲等同分區(例如大小)。

類型:初級,邏輯,單,跨度,條紋,鏡像,RAID-5
尺寸:10,100,500,1000,5000,10000,40000
格式的方法:快,慢
文件系統:FAT,FAT32,NTFS
集羣大小:512,1024,2048,4096,8192,16384,32768,65536
壓縮:開,關

有這些值在4700種可能的組合。如果在合理的時間內測試它們,將會非常困難。 研究表明,測試所有可能的值對可以提供非常好的覆蓋範圍,並且測試用例的數量仍然可以管理。例如,對於 示例,{​​Primary,FAT}是一對,{10,slow}是另一個;一個 單個測試用例可以覆蓋很多對。

對於上面示出的一組參數,PICT將產生60測試 例。

外賣點

  • 有4700種可能的組合
  • PICT將產生60個測試用例

所有配對

背後,對測試 的理由是這樣的:在 程序最簡單的錯誤通常是由一個 單一輸入參數觸發。

缺陷的下一個最簡單的類別包括 那些依賴於對參數,其可以 具有全對測試被捕獲之間的相互作用 。

錯誤涉及 三者之間或多個參數的相互作用 逐步不太常見,而 同時正在逐步 更昂貴的詳盡 測試,它有其限度的所有可能 的 詳盡的測試,以找到投入。

+0

不確定這是否正確,問題的要求是什麼,但**非常簡潔和有用的答案。所有成對測試的優秀解釋及其好處。 – mklauber 2012-02-28 21:42:29

+0

@mklauber - OP指出*'我的問題是排列的數量'*所以我認爲所有對測試都會與OP相關。 – 2012-02-29 07:01:00