使用随机值来创建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
...
...
...
}
或者我应该使用固定值吗?
答案 0 :(得分:3)
单元测试应该是确定性的,以便在测试失败时简化故障查找。因此,它们不应包含随机值。
检查某些属性是否适用于任意值(您的测试有效地执行)确实有意义:为此您可以使用基于属性的测试框架,例如junit-quickcheck为您生成随机数据。
答案 1 :(得分:1)
可以随意使用,但要确保它运行良好: 打印随机值,这样你就可以看到它,并确保结果是预期的结果。
或者只是放一个已知值而不是随机值。
答案 2 :(得分:0)
通常,在单元测试用例中使用随机数据并不是一个好主意。通常,您希望测试产生确定性结果。然而,在人们使用随机数据测试功能的情况下 - 如果被测系统非常复杂,并且怀疑系统设计的测试套件(仍然应该在那里)是否能够获得足够的覆盖范围。然而,这种随机测试大多是长期运行的测试,并且不会在正常的回归测试过程中执行。
答案 3 :(得分:0)
如果我没有错,新的Random()(没有随机种子)总是产生相同的伪随机数序列,所以我认为可以使用它,因为实际上你总是会测试相同的数字序列!