我是测试新手。我正在使用netbeans。
我有大学考试单元,但是我不确定如何测试随机数方法。 我的问题是我应该如何测试以下方法?
/**
* Method will generate a set of integers between the minimum and maximum of
* the requested size. If the uniqueElements is true the set will consist of
* unique integer values
*
* @param size the number of elements for the array
* @param minimum the lower value of the range of integers to generate
* @param maximum the upper value of the range of integers to generate
* @param uniqueElements flag for unique values
* @return
*/
public static ArrayList<Integer> createSet(int size, int minimum, int maximum, boolean uniqueElements) {
boolean filled = false;
int i = 0;
ArrayList<Integer> arraySet = null;
if (size > 0) {
arraySet = new ArrayList<Integer>();
boolean isUnique = false;
while (!filled) {
int randi = (int) (Math.random() * (maximum - minimum)) + minimum;
// C isu = true;
// C for (int j = 0; j < i && u; j++) {
// ** NEED &= isu = randi != A.get(j);
// C }
//
// if (isu || !u) {
// A.add(randi);
// i++;
// }
isUnique = true;
for (int j = 0; j < i && uniqueElements; j++) {
isUnique = randi != arraySet.get(j);
}
if (isUnique || !uniqueElements) {
arraySet.add(randi);
i++;
}
filled = (i == size);
}
}
return arraySet;
}
对于这个作业,教授告诉我可以覆盖100%的代码。 我不确定该怎么做?
我创建了这个测试用例
/**
* Test of createSet method, of class ArraySetUtilities.
*/
@Test(timeout = 5000)
public void testCreateSet() {
System.out.println("createSet");
int size = 0;
int minimum = 0;
int maximum = 0;
boolean uniqueElements = true;
ArrayList<Integer> expResult = null;
ArrayList<Integer> result = ArraySetUtilities.createSet(size, minimum, maximum, uniqueElements);
assertEquals(expResult, result);
}
提前谢谢
答案 0 :(得分:1)
正如@flopshot所说,您应该拥有所有的IF。为此,您必须控制测试产生的随机数。
为此,我建议您将Math.random()替换为SingletonRandom并使用诸如JMockit之类的模拟框架。
更改“生产”代码以使其可测试是必须谨慎考虑的事情,但是,随机模拟是一个很好的方案。
您可以使用随机方法创建接口并对其实施两次,stack exchange question,或创建类SingletonRandom并在测试中模拟它。 mock singleton with jmockit在此处描述了相同的概念。
public class SingletonRandom {
private SingletonRandom() {}
public static SingletonRandom newInstance() {
return new SingletonRandom();
}
public double getRandomNumber() {
return Math.random();
}
}
在课堂上做类似的事情
int randi = (int) (SingletonRandom.newInstance().random() * (maximum - minimum)) + minimum;
在测试中模拟SingletonRandom
ClassTest {
@Mocked
SingletonRandom SingletonRandom;
@Test
testMethod() {
new Expectations() {{
SingletonGenerator.newInstance(); result = singletonGenerator;
singletonGenerator.getRandomNumber(); result = new double[] { 1.2, 2.5, 3.7 }; // Add the requested "random" numbers for your if casses
}};
// Add calls to method with assertion here
}
}
上进一步了解期望