我正在思考如何最好地为一个函数开发一个JUnit测试,该函数根据一些输入计算出一些点和值。该方法的目的是在给定一系列梯度值对的情况下计算一系列时间点,即
渐变1到值1,渐变2到值2,渐变3到值3,依此类推......
给定起始时间点和起始值,该函数计算达到每个值的时间点(在梯度值对中),直到达到目标值。这主要是在图表上绘制一条线,其中x轴具有日期值,而y轴具有数值。
要测试的方法需要以下输入:
GradientValuePair就像:
class GradientValuePair {
Double gradient; // Gradient up to Target
Double target;
...
}
此方法的输出基本上是ArrayList - 一个配置文件 - 带有:
class DatePoint {
Date date;
Double value;
...
}
EnsurePointEvery5Minuntes参数基本上每5分钟为计算的配置文件添加一个日期点,然后由该方法返回。
为确保测试有效,我需要检查每个日期和值是否符合预期:
现在对我来说困难的部分是决定如何编写TestCase。我想测试广泛/多样化的输入,以便:
现在给定不同输入集的数量将是:
30 *(0到1000 * 0到1000 = 500500)* 10 * 2 = 每个GradientValuePairs输入的300,300,000个不同的测试输入集
或者因为想要这样做而打电话给我们。也许这个实例的测试太多样了。
我想知道是否有人建议测试这样的场景。在我每次调用我正在测试的方法之前,我想不出任何其他方法来实现我自己的算法来计算输出 - 然后谁说我实现的算法来测试它是正确的。
答案 0 :(得分:2)
如果我理解正确的话。您建议您测试每组可能的数字输入组合。这几乎从不需要单元测试,因为它基本上等同于测试Java数学库是否适用于所有操作的所有数字。通常,您要做的是尝试识别边缘条件并为这些条件编写测试。这些将包括像0的东西。负数,数字溢出和具有导致相同事物的中间计算的输入组合。当然,你也想测试一些正常的香草数据,而不是边缘情况。
如此简短的回答:不,你不需要测试300M +输入集。