Java 构建测试数据的策略是什么

Java 构建测试数据的策略是什么,java,unit-testing,Java,Unit Testing,我是开发领域的新手,我想知道为单元测试构建一致和连贯的复杂测试数据(我是说我的POJO很复杂)的最佳策略是什么 我听说过“测试数据生成器”,但在网上谈论它的话题太少。我经常需要做完全相同的任务。是一种合适的方法,尽管我们应该小心区分原始模糊器和智能模糊器。智能fuzzer与普通fuzz工具(如)的不同之处在于,它生成针对应用程序的数据。显然,在这种情况下,您需要一个智能模糊器 要编写一个智能模糊器,您需要提取那些表示“一致和连贯”的规则,并将它们作为逻辑。最好举个例子。下面的模型类有一些与之相反

我是开发领域的新手,我想知道为单元测试构建一致和连贯的复杂测试数据(我是说我的POJO很复杂)的最佳策略是什么


我听说过“测试数据生成器”,但在网上谈论它的话题太少。

我经常需要做完全相同的任务。是一种合适的方法,尽管我们应该小心区分原始模糊器和智能模糊器。智能fuzzer与普通fuzz工具(如)的不同之处在于,它生成针对应用程序的数据。显然,在这种情况下,您需要一个智能模糊器

要编写一个智能模糊器,您需要提取那些表示“一致和连贯”的规则,并将它们作为逻辑。最好举个例子。下面的
模型
类有一些与之相反的逻辑

class Model {

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

    // Children
    List<Model> children;

    // Only true at the root
    boolean isRoot;
}
类模型{
//应始终介于0和10之间
INTA;
//孩子们
列出儿童名单;
//只有在根本上才是正确的
布尔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;
   }
}
类模型生成器{
私有随机;
//种子是个好主意;你希望你的测试是可复制的
公共模型生成器(int-seed){
随机=新随机(种子);
}
公共模型(){
返回generateSingleItem(true);
}
私有模型generateSingleItem(布尔isRoot){
模型=新模型();
model.isRoot=isRoot;
model.a=random.nextInt(10);
int childrenCount=random.nextInt(100);
model.children=新数组列表(childrenCount);

对于(int i=0;我很感谢您的回答,但在测试我的应用程序的健壮性之前,我需要为单元测试提供可行的数据。我想我一定解释得很糟糕,对不起!在上面的示例中,ModelGenerator为您的单元测试创建数据。好的,如果我理解您的意思,您的方法类似于此网站上的描述:?S相似的是,但不完全相同。我认为ObjectMother模式(我以前没有见过,所以感谢链接!)只关注生成一组对象,而我提倡的生成器方法生成随机(但满足一些约束)对象。好的,非常感谢您的时间,如果您感兴趣的话“对象母亲”模式您可能会对这里描述的“测试数据生成器”模式更感兴趣,也可以看看这个。如果您有时间,请给我您的反馈。