在Java单元测试中,是否可以在循环中包含断言语句?

时间:2012-03-15 01:30:26

标签: java junit

这是我的测试:

@Test
public void randomDouble() {
    int Min = -1;
    int Max = 1;
    double r;

    for (int i = 0; i < 5; i++) {
        r = Min + (Math.random() * ((Max - Min) + 1));
        System.out.printf("%d %d: %.1f\n", Min, Max, r);
        assertTrue(Max < r && Max > r);
    }
}

似乎在第一次运行循环中的assertTrue语句后返回测试。如果我删除它,我得到5结果输出。有了它,我只得到一个。

我在Python中使用这种模式进行模糊测试。

3 个答案:

答案 0 :(得分:5)

断言在第一次迭代时失败;它永远不能通过(r如何比Max更大?)。

答案 1 :(得分:3)

没有什么可以限制断言进入循环。

其他一些观点:

  • 测试将始终失败(请参阅下一个项目,了解您可能需要的内容)

  • java在语言中有一个断言:assert Min <= r && r <= Max : "bad range"

  • ((Max - Min) + 1)中的“+1”对我来说似乎不对

答案 2 :(得分:1)

即使您将断言更改为assertTrue(Min < r && Max > r);,这似乎是预期的,但测试仍然经常在第一次迭代时失败:r = Min + (Math.random() * ((Max - Min)+1));中的“+1”错误。