我想测试下面的两种方法,但因为它基于随机输出,所以我的首选 assertEquals()
不起作用。
我只是想测试以确保这些方法正在产生某种输出。有任何想法吗?
新手程序员,感谢帮助。
public void compRandomChoice() {
double choice = (Math.random() * 100 / 100);
if (choice > 0 && choice <= 0.34) {
computer.setChoice(HandThrow.ROCK);
} else if (choice > 0.34 && choice <= 0.67) {
computer.setChoice(HandThrow.PAPER);
} else {
computer.setChoice(HandThrow.SCISSORS);
}
}
public String gameWinner() {
String gameResult;
if (human.getChoice() == computer.getChoice()) {
gameResult = "ITS A TIE!";
} else if (human.getChoice() == HandThrow.ROCK
&& computer.getChoice() == HandThrow.SCISSORS
|| human.getChoice() == HandThrow.PAPER
&& computer.getChoice() == HandThrow.ROCK
|| human.getChoice() == HandThrow.SCISSORS
&& computer.getChoice() == HandThrow.PAPER) {
gameResult = "CONGRATS, YOU WIN!";
} else {
gameResult = "COMPUTER WINS!";
}
return gameResult;
}
最佳答案
我建议更改 compRandomChoice()
函数如下
public void compRandomChoice(double rand_no) {
double choice = (rand_no * 100 / 100);
if (choice > 0 && choice <= 0.34) {
computer.setChoice(HandThrow.ROCK);
} else if (choice > 0.34 && choice <= 0.67) {
computer.setChoice(HandThrow.PAPER);
} else {
computer.setChoice(HandThrow.SCISSORS);
}
}
然后在您的程序中,您可以将其称为 compRandomChoice(Math.random())
现在在您的单元测试中,
您可以对输入进行硬编码,例如compRandomChoice(0.5)
并断言结果符合预期。
同样,将public String gameWinner()
更改为public String gameWinner(String human_choice, String Computer_choice)
public String gameWinner(String human_choice, String computer_choice) {
String gameResult;
if (human_choice == computer_choice) {
gameResult = "ITS A TIE!";
.......
在您的代码中,您可以将该函数调用为 gameWinner( human.getChoice(),computer.getChoice())
。在单元测试中,您可以对输入进行硬编码(使用与之前函数类似的方法),并断言您根据传递的参数获得了预期结果。
关于java - 如何使用 JUnit 测试 Java 中的任何输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16514204/