2011-06-07 89 views
3

我是開發領域的新手,我想知道哪些是構建一致且一致的複雜測試數據(我的意思是POJO填充很複雜)的單元測試的最佳策略?構建測試數據的策略

我聽說過「測試數據生成器」,但在網絡上談論的太少話題。

回答

0

我經常需要做完全相同的任務。 Fuzz testing是一個合適的方法,雖然我們應該小心區分原始模糊器和智能模糊器。智能模糊器與普通的模糊工具(如zzuf)不同,它可以生成針對您應用的數據。顯然在這種情況下,你需要一個智能模糊器。

要編寫智能模糊器,您需要提取那些代表「一致和一致」的規則,並將它們作爲邏輯。可能最好舉個例子。下面的Model類有一些反對它的邏輯。

class Model { 

    // Should always be between 0 and 10 
    int a; 

    // Children 
    List<Model> children; 

    // Only true at the root 
    boolean isRoot; 
} 

我們可以通過編寫這些規則來編寫測試數據生成器。

class ModelGenerator { 
    private Random random; 

    // A seed is a good idea; you want your tests to be reproducible 
    public ModelGenerator(int seed) { 
     random = new Random(seed); 
    } 

    public Model arbitrary() { 
     return generateSingleItem(true); 
    } 

    private Model generateSingleItem(boolean isRoot) { 
     Model model = new Model(); 
     model.isRoot = isRoot; 
     model.a = random.nextInt(10); 

     int childrenCount = random.nextInt(100); 
     model.children = new ArrayList<Model>(childrenCount); 
     for (int i=0;i<childrenCount;++i) { 
      model.children.add(generateSingleItem(false)); 
     } 

     return model; 
    } 
} 

現在您可以使用生成器爲您創建隨機(但可預測感謝種子)模型來測試斷言。

該方法與QuickCheck密切相關。有一個Java version可用,它提供了一個通用的接口(以及更多!)上述的方法。

+0

感謝您的迴應,但在測試我的應用程序的穩健性之前,我需要爲單元測試提供可行的數據。 – jakcam 2011-06-07 15:53:44

+0

我想我一定非常不好地解釋自己,對不起!在上面的例子中,ModelGenerator爲您的單元測試創​​建數據。 – 2011-06-07 15:54:45

+1

好吧,如果我理解你,你的方法看起來像這個網站描述:[鏈接](http://martinfowler.com/bliki/ObjectMother.html)? – jakcam 2011-06-07 16:01:24