Java Junit是空测试
老师给了我们一个例子来测试我们的代码,但它给了我一个错误,如果有人能找出它为什么给我这个错误,我将不胜感激Java Junit是空测试,java,junit,Java,Junit,老师给了我们一个例子来测试我们的代码,但它给了我一个错误,如果有人能找出它为什么给我这个错误,我将不胜感激 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 se
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无法知道什么是无效参数,什么不是无效参数,因此如果您希望抛出正确的异常,您必须自己抛出它(下面的完整代码)。如果没有,那么在调用
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;
}
public int compareTo(其他玩家){
//TODO自动生成的方法存根
如果(其他==null)
抛出新的IllegelArgumentException();
如果(点<其他点)返回-1;
如果(点>其他点)返回1;
返回0;
}
如果片段中确实有jouer2
而不是player2
,则可能会看到一个“未解决的编译错误”(即java.lang.error
),而不是预期的IllegalArgumentException
(不是java.lang.error
),因为该代码不会按原样编译
如果是这种情况,请确保您的代码在测试之前已编译(在本例中,请修复“Jouer2”),并且不要忽略编译过程中出现的错误。您的代码包含拼写错误、缺少变量声明,并且与所有命名约定都不匹配 如果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;
}
}
包片段;
导入org.junit.Test;
公共类代码段{
@测试(预期=IllegalArgumentException.class)
公共无效测试(){
Player player1=新玩家();
player2=null;
播放器1.设定点(4);
player1.比较(player2);
}
}
职业选手{
私人积分;
公共整数比较(其他玩家){
如果(other==null)抛出新的IllegalArgumentException(“无法将播放器与null进行比较”);
如果(点<其他点)
返回-1;
如果(点>其他点)
返回1;
返回0;
}
公共无效设定点(整数点){
这个点=点;
}
}
你的意思是拼错了“ohter”?另外,你得到了一个“player2=null”,但后来“jouer2”而不是“player2”也重新拼写了等。你的意思是在compareTo调用中的player2而不是jouer2吗?你当前的compareTo可以简化为返回点-other.points
我想您需要更新compareTo
方法,以便在接收null
参数时抛出IllegalArgumentException
,或者将测试更改为接收NullPointerException
。应该抛出NullPointerException,否?@Ypnypn,它将抛出NullPointerException
,这不会导致OP描述的效果,因为NPE不是一个错误
。回答得好;但请注意,“不匹配所有命名约定”并不是编译错误(尽管我个人希望是这样)。
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;
}
}