Java 生成随机测试用例

Java 生成随机测试用例,java,Java,我正在开发一个库,需要对它进行测试。在我的类中定义了几个操作(如函数),客户机可以按任何顺序调用这些操作 Operation1(param1, param2) Operation2(param3) . . . OperationN(paramX, paramY, paramZ) param1、param2等为整数/双精度 现在,我正在考虑编写一个测试代码来随机化操作的执行,这样M个操作的序列将随机执行。每次调用操作时,都需要随机生成参数 在Java中实现这一点的最佳方法是什么。您需要一个接口来

我正在开发一个库,需要对它进行测试。在我的类中定义了几个操作(如函数),客户机可以按任何顺序调用这些操作

Operation1(param1, param2)
Operation2(param3)
.
.
.
OperationN(paramX, paramY, paramZ)
param1、param2等为整数/双精度

现在,我正在考虑编写一个测试代码来随机化操作的执行,这样M个操作的序列将随机执行。每次调用操作时,都需要随机生成参数


在Java中实现这一点的最佳方法是什么。

您需要一个接口来执行以下操作:

public interface Operation {
  public void do();
}
为要执行的每个操作创建一个实现接口的类。可以将各个参数传递给构造函数

然后将所有实例放在类型操作列表中,随机化并迭代

List<Operation> ops = new Vector<Operation>();
ops.add(new ...);
Collections.shuffle();
for (Operation o: ops) {
  o.do();
}
List ops=new Vector();
增加(新的…);
Collections.shuffle();
用于(操作o:ops){
o、 do();
}

随机测试似乎很有吸引力,因为它们似乎允许您避免编写大量单独的测试。问题是,您永远无法确定随机序列是否会击中可能失败的边缘情况等。依我看,它们不能替代精心设计和实施的白盒测试


对于像您这样的案例,我尝试设计一组测试助手,使构建输入数据结构变得容易。例如,一个简单的语言+解析器,它允许我将输入和预期输出表示为文本,或者嵌入在单元测试用例中,或者作为单独的文件

如果你采用随机生成的测试,那么它们仍然是可重复的,这一点很重要。大多数随机生成器都允许您指定一个种子来生成随机性,这样,如果您的测试产生错误,您就可以通过向它输入相同的种子来重新运行完全相同的测试。否则,您将运行不同的测试,并且不知道是否已解决问题。我计划记录随机生成的序列。这是不够的。您需要能够在修复bug后再次运行相同的“随机”测试序列,或者简单地作为回归。如果测试是真正随机的,你就无法知道给定的运行是否会执行失败的组合。我的程序有一个用户测试模式,它会从文本文件中读取操作序列。在随机化之后,我计划写一个类似的文件,可以再次用作输入(在用户编辑模式下)。我正在寻找某种“模式”来优雅地随机化它。“你永远不能确定随机序列会击中边缘案例”随机测试数据的一个优点是,它为您提供了一个机会,可以针对您没有想到的边缘情况检测到边缘情况的错误处理。我同意它们不能替代goood单元测试。