Java 构建测试数据的策略是什么
我是开发领域的新手,我想知道为单元测试构建一致和连贯的复杂测试数据(我是说我的POJO很复杂)的最佳策略是什么Java 构建测试数据的策略是什么,java,unit-testing,Java,Unit Testing,我是开发领域的新手,我想知道为单元测试构建一致和连贯的复杂测试数据(我是说我的POJO很复杂)的最佳策略是什么 我听说过“测试数据生成器”,但在网上谈论它的话题太少。我经常需要做完全相同的任务。是一种合适的方法,尽管我们应该小心区分原始模糊器和智能模糊器。智能fuzzer与普通fuzz工具(如)的不同之处在于,它生成针对应用程序的数据。显然,在这种情况下,您需要一个智能模糊器 要编写一个智能模糊器,您需要提取那些表示“一致和连贯”的规则,并将它们作为逻辑。最好举个例子。下面的模型类有一些与之相反
我听说过“测试数据生成器”,但在网上谈论它的话题太少。我经常需要做完全相同的任务。是一种合适的方法,尽管我们应该小心区分原始模糊器和智能模糊器。智能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模式(我以前没有见过,所以感谢链接!)只关注生成一组对象,而我提倡的生成器方法生成随机(但满足一些约束)对象。好的,非常感谢您的时间,如果您感兴趣的话“对象母亲”模式您可能会对这里描述的“测试数据生成器”模式更感兴趣,也可以看看这个。如果您有时间,请给我您的反馈。