Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Junit是空测试_Java_Junit - Fatal编程技术网

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;
    }

}