assertEquals(Java)问题

时间:2015-03-16 17:42:48

标签: java junit

我正在尝试制作“摇滚,纸张,剪刀”的游戏。我有这样的测试:

@Test
public void rockBeatsScissors() {
    assertEquals(rock, rock.vs(scissors));
}

我认为写一个函数Equals就足够了,例如:

public class Rock {

Object vs(Scissors s) {
    return new Rock();
}

Object vs(Paper p) {
    return new Paper();
}

Object vs(Rock r) {
    return new Rock();
}

boolean equals(Rock r) {
    return true;
}

boolean equals(Paper p) {
    return false;
}

boolean equals(Scissors s) {
    return false;
}

}

(我知道我应该添加一个HashCode函数,顺便说一下) 我运行测试,但我只是失败了。我做错了什么?

1 个答案:

答案 0 :(得分:3)

equals()使用的assertEquals()方法将Object作为参数。现在,你还没有覆盖Object#equals()方法,但提供了你自己的3个equals方法,甚至不使用它,因此使用了默认的Object类方法,它只是参考比较。

您需要进行以下实施:

/**
 *  Terrible `equals()` method implementation. Just for demonstration purpose.
 */
@Override
public boolean equals(Object obj) {
    return obj instanceof Rock;
}