2011-06-07 92 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