【发布时间】:2021-02-24 23:08:19
【问题描述】:
我有一个 java 类,它接受一个数字数组和一个相应概率数组,并充当随机数生成器,根据另一个数组中定义的相应概率从数组中返回一个数字。如何编写最少但有效的单元测试集?
class RandomGen {
private int[] randomNums;
private float[] probabilities;
private float[] total_prob;
RandomGen(int[] randomNums, float[] probabilites) throws Exception {
if (this.set_arrays(randomNums, probabilites));
else {
throw new Exception("Invalid array format");
}
}
private boolean set_arrays(int[] randomNums, float[] probabilities) {
if (check_arrays(randomNums, probabilities)) {
this.randomNums = randomNums;
this.probabilities = probabilities;
this.total_prob = new float[this.probabilities.length];
total_prob[0] = probabilities[0];
for (int i = 1; i < probabilities.length; i++){
total_prob[i] = total_prob[i-1] + probabilities[i];
}
return true;
}
return false;
}
public int[] return_randomNums() {
return this.randomNums;
}
public float[] return_probabilites() {
return this.probabilities;
}
private boolean check_arrays(int[] randomNums, float[] probabilities) {
float total_prob = 0;
for (int i = 0; i < probabilities.length; i++) {
if (probabilities[i] < 0) return false;
total_prob += probabilities[i];
}
if (randomNums.length != probabilities.length || total_prob != 1) return false;
return true;
}
public int nextNum() {
float random = (float) Math.random();
if (random <= total_prob[0]) {
return randomNums[0];
}
for (int i=1; i < total_prob.length; i++) {
if (total_prob[i-1] < random && random <= total_prob[i]) return randomNums[i];
}
return 0;
}
}
【问题讨论】:
-
这是一个很奇怪的类。不应该只是一种方法吗?
-
出于 OOP 的原因,我的任务是为这个随机数生成器创建一个类,我正在尝试为此进行单元测试。
-
不清楚创建单元测试有什么问题。如果您认为仅仅因为您使用的是 Math.random(),那么将很难重现测试,只需更改为 new java.util.Random(seed) 并使用相同的种子进行测试。否则,您必须说明实施单元测试时遇到的问题。
-
我的问题很笼统。我之前没有对我的任何代码进行单元测试,所以我只是想问一下如何处理这个任务
标签: java unit-testing class testing