Junit空测试

时间:2014-03-10 20:13:30

标签: 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 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);
}

3 个答案:

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