在JUnit测试类中使用随机值

时间:2016-01-23 12:59:43

标签: java unit-testing random junit

使用随机值来创建JUnit的测试对象是一个很好的实践吗? 像这样:

public class MonomialTest {

    private static final Random RANDOM = new Random();

    private Monomial monomial;
    private float coefficient;
    private int exponent;

    @Before
    public void setUp() throws Exception {
        coefficient = RANDOM.nextFloat();
        exponent = RANDOM.nextInt();
        monomial = new Monomial(coefficient, exponent);
    }

    @Test
    ...
    ...
    ...

}

或者我应该使用固定值吗?

4 个答案:

答案 0 :(得分:3)

单元测试应该是确定性的,以便在测试失败时简化故障查找。因此,它们不应包含随机值。

检查某些属性是否适用于任意值(您的测试有效地执行)确实有意义:为此您可以使用基于属性的测试框架,例如junit-quickcheck为您生成随机数据。

答案 1 :(得分:1)

可以随意使用,但要确保它运行良好: 打印随机值,这样你就可以看到它,并确保结果是预期的结果。

或者只是放一个已知值而不是随机值。

答案 2 :(得分:0)

通常,在单元测试用例中使用随机数据并不是一个好主意。通常,您希望测试产生确定性结果。然而,在人们使用随机数据测试功能的情况下 - 如果被测系统非常复杂,并且怀疑系统设计的测试套件(仍然应该在那里)是否能够获得足够的覆盖范围。然而,这种随机测试大多是长期运行的测试,并且不会在正常的回归测试过程中执行。

答案 3 :(得分:0)

如果我没有错,新的Random()(没有随机种子)总是产生相同的伪随机数序列,所以我认为可以使用它,因为实际上你总是会测试相同的数字序列!