老师给我们举了一个例子来测试我们的代码,但它给了我一个错误,如果有人能弄明白为什么它会给我错误,我会很感激......
public int compareTo(player other) {
// TODO Auto-generated method stub
if (points < other.points) return -1;
if (points > ohter.points) return 1;
return 0;
}
public void setPoints(int points) {
this.points = points;
}
测试结果:
java.lang.Exception:意外的异常,预期
<java.lang.IllegalArgumentException>
但是<java.lang.Error>
。
测试:
@Test(expected=IllegalArgumentException.class)
public void theNullTest(){
player2 = null;
player1.setPoints(4);
player1.compareTo(joueur2);
}
答案 0 :(得分:2)
如果您在代码段中确实有joueur2
而不是player2
,则可能会看到“未解决的编译错误”(这是java.lang.Error
)而不是预期的{{ 1}}( not a IllegalArgumentException
),因为该代码不会按原样编译。
如果是这种情况,请确保您的代码在测试之前实际编译(在这种情况下,修复“joueur2”),并且在构建期间不要忽略编译器错误。
答案 1 :(得分:1)
您的代码包含拼写错误,缺少变量声明,并且与所有命名约定都不匹配。
如果Java遇到编译问题,那么它会抛出错误 - 而不是预期的异常,而是您正在寻找。
我修改了代码,你在这里:
package snippet;
import org.junit.Test;
public class Snippet {
@Test(expected = IllegalArgumentException.class)
public void theNullTest() {
Player player1 = new Player();
Player player2 = null;
player1.setPoints(4);
player1.compareTo(player2);
}
}
class Player {
private int points;
public int compareTo(Player other) {
if (other == null) throw new IllegalArgumentException("Cannot compare a player to null");
if (points < other.points)
return -1;
if (points > other.points)
return 1;
return 0;
}
public void setPoints(int points) {
this.points = points;
}
}
答案 2 :(得分:0)
Java无法知道什么是无效参数,什么不是,所以如果你想要抛出正确的异常,你必须自己抛出它(下面的完整代码)。如果不这样做,那么在调用other.points
时,您要求的变量属于不存在的对象。这会抛出NullPointerException。
public int compareTo(player other) {
// TODO Auto-generated method stub
if (other == null)
throw new IllegelArgumentException();
if (points < other.points) return -1;
if (points > ohter.points) return 1;
return 0;
}