assertEquals (Java) 有问题
Trouble with assertEquals (Java)
我正在尝试制作 "Rock, papers, scissors" 的游戏。我有这样的测试:
@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 函数)
我 运行 测试,我只得到失败。我做错了什么?
assertEquals()
使用的 equals()
方法是以 Object
作为参数的方法。现在,您还没有覆盖 Object#equals()
方法,但提供了您自己的一组 3 个 equals 方法,甚至不会被使用,因此默认的 Object
class 方法是used,只是做参考比较。
您必须执行以下操作:
/**
* Terrible `equals()` method implementation. Just for demonstration purpose.
*/
@Override
public boolean equals(Object obj) {
return obj instanceof Rock;
}
我正在尝试制作 "Rock, papers, scissors" 的游戏。我有这样的测试:
@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 函数) 我 运行 测试,我只得到失败。我做错了什么?
assertEquals()
使用的 equals()
方法是以 Object
作为参数的方法。现在,您还没有覆盖 Object#equals()
方法,但提供了您自己的一组 3 个 equals 方法,甚至不会被使用,因此默认的 Object
class 方法是used,只是做参考比较。
您必须执行以下操作:
/**
* Terrible `equals()` method implementation. Just for demonstration purpose.
*/
@Override
public boolean equals(Object obj) {
return obj instanceof Rock;
}