所以我正在用Java做junit测试。
我应该测试两种具体类型
public class BoolValue implements Value{
private boolean item;
//the Constructor
public BoolValue(boolean data){
item = data;
}
//checks to see if the current object is of the same type as the parameter
public boolean equals(Value v){
boolean result = false;
if (v instanceof BoolValue) {
if(this == v)
result = true;
}
return result; //true if equal
}
// returns current state string
public String toString(){
return " "+item;
}
}
这是我的测试文件中的测试用例
@Test
public void testBoolean(){
BoolValue value = new BoolValue(true);
BoolValue value2 = new BoolValue(true);
assertEquals(true, value.equals(value2));
}
它返回false而不是预期的true
在equals方法中,我想比较两个布尔类型,但是我不能使用java.object equals(),因为程序将其读取为类equals(),因此它是递归的。 我如何调用java.object equals()来比较布尔类型。另外,我是否正在按照正确的方式进行操作
答案 0 :(得分:4)
if (v instanceof BoolValue) {
if(this == v)
result = true;
}
您需要==
时不能使用new BoolValue(true).equals(new BoolValue(true))
。您需要比较其中的两个item
。
此外,您需要接受Object
才能获得“正确”的equals
方法。
@Override
public boolean equals(Object v){
return (v instanceof BoolValue && ((BoolValue)v).item == this.item);
}
当您覆盖equals
时,还需要覆盖hashCode
。
@Override
public int hashCode(){ return item ? 0 : 1; }
最后(除非您打算使这些“值”可变),由于只有两个可能的值,因此应将构造函数设为私有并提供两个值作为静态字段(也可以使用{{1} }。
enum