使用JUnit测试大型输入范围方案

时间:2012-03-08 10:27:12

标签: junit large-data

我正在思考如何最好地为一个函数开发一个JUnit测试,该函数根据一些输入计算出一些点和值。该方法的目的是在给定一系列梯度值对的情况下计算一系列时间点,即

渐变1到值1,渐变2到值2,渐变3到值3,依此类推......

给定起始时间点和起始值,该函数计算达到每个值的时间点(在梯度值对中),直到达到目标值。这主要是在图表上绘制一条线,其中x轴具有日期值,而y轴具有数值。

要测试的方法需要以下输入:

  • StartTime(日期)
  • StartValue(Double)
  • TargetValue(Double)
  • GradientValuePairs(ArrayList)
  • EnsurePointEvery5Minutes(布尔)

GradientValuePair就像:

class GradientValuePair {
    Double gradient; // Gradient up to Target
    Double target;
    ...
}

此方法的输出基本上是ArrayList - 一个配置文件 - 带有:

class DatePoint {
    Date date;
    Double value;
    ...
}

EnsurePointEvery5Minuntes参数基本上每5分钟为计算的配置文件添加一个日期点,然后由该方法返回。

为确保测试有效,我需要检查每个日期和值是否符合预期:

  • 使用预期的数组迭代数组。
  • 将StartTime中的分钟/秒偏移量与某种结构中的预期值进行存储。

现在对我来说困难的部分是决定如何编写TestCase。我想测试广泛/多样化的输入,以便:

  • StartTime 将涵盖30分钟,即2012-03-08 00:00至2012-03-08 00:30。
  • StartValue 将介于0到1000之间。
  • TargetValue 将在StartValue范围内为1000.
  • GradientValuePairs 将需要测试大约10个不同的阵列。
  • EnsurePointEvery5Minutes 将同时使用true和false进行测试。

现在给定不同输入集的数量将是:

30 *(0到1000 * 0到1000 = 500500)* 10 * 2 = 每个GradientValuePairs输入的300,300,000个不同的测试输入集

或者因为想要这样做而打电话给我们。也许这个实例的测试太多样了。

我想知道是否有人建议测试这样的场景。在我每次调用我正在测试的方法之前,我想不出任何其他方法来实现我自己的算法来计算输出 - 然后谁说我实现的算法来测试它是正确的。

1 个答案:

答案 0 :(得分:2)

如果我理解正确的话。您建议您测试每组可能的数字输入组合。这几乎从不需要单元测试,因为它基本上等同于测试Java数学库是否适用于所有操作的所有数字。通常,您要做的是尝试识别边缘条件并为这些条件编写测试。这些将包括像0的东西。负数,数字溢出和具有导致相同事物的中间计算的输入组合。当然,你也想测试一些正常的香草数据,而不是边缘情况。

如此简短的回答:不,你不需要测试300M +输入集。