簡體   English   中英

生成用於所有對測試的測試

[英]Generating tests for all-pairs testing

我有一個簡短的(Java)方法,其中包含幾個參數,它們執行一些非直觀的計算。 為此方法編寫單元測試以實現代碼覆蓋是微不足道的,但是測試並未涵蓋該方法的精妙之處。 我正在尋找一個測試框架或其他工具,該工具將允許我基於為參數定義的分區對該方法進行所有對(所有元組)測試。

例如,假設我有以下方法:

int foo(int begin, int end, int first, int last) {
    ...
}

我已經知道一些約束,可以從外部強制執行:

begin <= end
first <= last

我想根據我自己對參數的了解來定義顯式的等價關系。 例如:

begin == MIN
begin > MIN && begin < 0
begin == 0
begin == 1
begin > 1 && begin < MAX
begin == MAX

我還想定義涉及多個參數的等價關系。 例如:

begin + 1 < end
begin + 1 == end
begin == end

要進行測試的組合是從每個等價關系中選擇一個等價類(例如,從第一個關系begin == 0從第二個關系begin + 1 < end ),這樣約束就可以滿足了。 [順便說一句,我意識到可滿足性是NP完全的。 如果組合包含相對較少的約束集,我願意使用它。]通過幾個參數,組合的數量變得笨拙。 手動為每種組合編寫測試並找到滿足最終約束集的參數很乏味且容易出錯。

我正在尋找一個可以自動測試每個組合的測試框架,或者一個可以為每個邏輯上一致的組合生成測試的測試生成器(由您的真實插入的不變檢查)。 這與CodePro之類的測試生成工具不同 ,后者從實際實現中生成測試用例。 實際上,我想為該方法的接口而不是其實現生成測試。 這不僅使我能夠在實現該方法(TDD)之前編寫測試,而且即使在以后的修改之后,也可以確保對該方法進行了全面的測試。

是否存在這樣的工具,或者可以將某些東西放在一起嗎? 也許我正以錯誤的方式來對待,而您還有另一個建議...

簡單的嵌套循環(在每個最內層的循環迭代中調用測試方法)是否符合要求(或至少主要符合要求)?

就像是:

int[] ends = new int[] {-50, -10, -1, 0, 1, 50, MIN, MAX};
for (int end : ends) {
    int[] begins = new int[] {end - 10, end - 1, end, MIN, MAX};
    for (int begin : begins) {
        if (begin <= end && begin >= MIN && begin <= MAX) {
             testFoo(begin, end);
        }
    }
}

有關此方面的一些想法,請參閱David Saff理論測試方面 工作。

您可以在測試框架之外使用工具嗎? 如果是這樣,我使用James Bach的AllPairs效果很好。 還有Hexawise

如果您不了解, http://pairwise.org是閱讀成對和組合測試和工具的好地方!

如果您仍然對在JUnit框架下執行組合測試的庫感興趣。 我最近實現了一個庫“ JCUnit”,它確實做到了。

它在JUnit下生成測試用例,並使用它們運行測試方法。

http://dakusui.g​​ithub.io/jcunit/

我可能建議,如果您對算法進行了TDD,那么您可能已經具有足夠的測試覆蓋率。 如果隨后有人進入並更改了算法,則應該看到至少有一個原始測試中斷。 如果您有一些要測試的邊緣條件,則可以編寫一些,但是如果添加后這些邊緣沒有足夠的趣味性使其變為紅色,那么它們可能就沒有足夠的趣味性來保留和復制現有測試。 冗余測試的價值較低,我傾向於將其刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM