Java JUnit测试公共布尔等于(对象obj)
我正在进行JUnit测试我正在进行的一个项目,并遇到了一个测试以下方法的墙:Java JUnit测试公共布尔等于(对象obj),java,junit,Java,Junit,我正在进行JUnit测试我正在进行的一个项目,并遇到了一个测试以下方法的墙: public boolean equals(Object obj) { if (!(obj instanceof Vehicle)) { return false; } else { Vehicle other = (Vehicle) obj; return (owner + yearMakeModel + value). equals(other.owner
public boolean equals(Object obj) {
if (!(obj instanceof Vehicle)) {
return false;
}
else {
Vehicle other = (Vehicle) obj;
return (owner + yearMakeModel + value).
equals(other.owner + other.yearMakeModel
+ other.value);
我使用以下测试来测试instanceof,但是,它似乎没有测试正确的代码。提交后,我的代码的这一部分会突出显示,我看到一条消息,说明我的测试中没有执行此方法
/**
* instanceof test false.
*/
@Test public void instanceOfFalseTest() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Object obj = new Object();
Assert.assertFalse(obj instanceof Vehicle);
}
/**
* instanceof test true.
*/
@Test public void instanceOfTrueTest() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Object obj = new Object();
Assert.assertTrue(car1 instanceof(Vehicle);
Java的instanceof是JVM指令集的一部分,它是一个特定的同名指令。如果感兴趣,请阅读第6章。Java虚拟机指令集:
幸运的是,既没有办法@Override实现,也没有办法改变行为——这意味着这个特性是不稳定的,并且没有必要测试一个对象是否是另一个对象的实例,因为定义使用了extends和implements关键字
请注意,该方法与此运算符/指令无关。Java的instanceof是JVM指令集的一部分,它是一个特定的同名指令。如果感兴趣,请阅读第6章。Java虚拟机指令集:
幸运的是,既没有办法@Override实现,也没有办法改变行为——这意味着这个特性是不稳定的,并且没有必要测试一个对象是否是另一个对象的实例,因为定义使用了extends和implements关键字
请注意,该方法与此运算符/指令无关。无需测试Java的instanceof运算符, 因为它是JVM的内置功能,不是由您开发的 你应该测试一下你的方法。 例如:
@Test public void equalsFalseTest1() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Object obj = new Object();
Assert.assertNotEquals(car1, obj);
}
@Test public void equalsFalseTest2() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car2 = new Car("Doe, John", "2017 Honda Accord", 222000, true);
Assert.assertNotEquals(car1, car2);
}
@Test public void equalsTrueTest() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car2 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Assert.assertEquals(car1, car2);
}
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car2 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car3 = new Car("Jones, Samual", "2017 Honda Accord", 222000, true);
assertThat(car1, is(car2));
assertThat(car1, not(car3));
然后实际调用equals方法。无需测试Java的instanceof运算符, 因为它是JVM的内置功能,不是由您开发的 你应该测试一下你的方法。 例如:
@Test public void equalsFalseTest1() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Object obj = new Object();
Assert.assertNotEquals(car1, obj);
}
@Test public void equalsFalseTest2() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car2 = new Car("Doe, John", "2017 Honda Accord", 222000, true);
Assert.assertNotEquals(car1, car2);
}
@Test public void equalsTrueTest() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car2 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Assert.assertEquals(car1, car2);
}
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car2 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car3 = new Car("Jones, Samual", "2017 Honda Accord", 222000, true);
assertThat(car1, is(car2));
assertThat(car1, not(car3));
然后实际上调用了equals方法。Nikolas的另一个答案很好地解释了为什么当前的测试毫无意义。更合理的测试可以如下所示:
@Test public void equalsFalseTest1() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Object obj = new Object();
Assert.assertNotEquals(car1, obj);
}
@Test public void equalsFalseTest2() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car2 = new Car("Doe, John", "2017 Honda Accord", 222000, true);
Assert.assertNotEquals(car1, car2);
}
@Test public void equalsTrueTest() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car2 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Assert.assertEquals(car1, car2);
}
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car2 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car3 = new Car("Jones, Samual", "2017 Honda Accord", 222000, true);
assertThat(car1, is(car2));
assertThat(car1, not(car3));
where is指的是一个匹配器,它允许您以非常优雅的方式写下您的测试用例
你要想出所有可能的方法,让两个物体可以相等,也可以不相等。然后,为每个案例至少创建一个测试用例。理想情况下,它们各自进入一个独立的@Test方法。尼古拉斯的另一个答案很好地解释了为什么当前的测试毫无意义。更合理的测试可以如下所示:
@Test public void equalsFalseTest1() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Object obj = new Object();
Assert.assertNotEquals(car1, obj);
}
@Test public void equalsFalseTest2() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car2 = new Car("Doe, John", "2017 Honda Accord", 222000, true);
Assert.assertNotEquals(car1, car2);
}
@Test public void equalsTrueTest() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car2 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Assert.assertEquals(car1, car2);
}
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car2 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Car car3 = new Car("Jones, Samual", "2017 Honda Accord", 222000, true);
assertThat(car1, is(car2));
assertThat(car1, not(car3));
where is指的是一个匹配器,它允许您以非常优雅的方式写下您的测试用例
你要想出所有可能的方法,让两个物体可以相等,也可以不相等。然后,为每个案例至少创建一个测试用例。理想情况下,它们各自进入一个独立的@测试方法。另一个答案:
@Test public void instanceOfFalseTest() {
Object obj = new Object();
assertThat(obj, instanceOf(Vehicle.class));
}
@Test public void instanceOfTrueTest() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Object obj = new Object();
assertThat(car1, instanceOf(Vehicle.class));
}
,其中instanceOf检查对象是否为给定类的实例
单击“参考”按钮,查看其他答案:
@Test public void instanceOfFalseTest() {
Object obj = new Object();
assertThat(obj, instanceOf(Vehicle.class));
}
@Test public void instanceOfTrueTest() {
Car car1 = new Car("Jones, Sam", "2017 Honda Accord", 222000, true);
Object obj = new Object();
assertThat(car1, instanceOf(Vehicle.class));
}
,其中instanceOf检查对象是否为给定类的实例
单击reference hamcrest这有什么问题?你的意思是没有调用equals方法吗?在JUnit中,不应该测试java库或外部库,应该测试他的代码。你应该测试equals函数,而不是instanceof关键字这有什么不对?你的意思是没有调用equals方法吗?在JUnit中,不应该测试java库或外部库,应该测试他的代码。你应该测试equals函数,而不是关键字的实例你在我离线写答案的时候写了答案,但是我们的答案有点不同,所以我想我也会保留我的答案-@幽灵猫的答案相似,但不相等-你写了你的答案,而我写我的离线,但好吧,我们的答案有点不同,所以我想我也会保持我的-@幽灵猫的答案相似,但不相等-我喜欢你在这里的链接,我喜欢你为其他答案留下一些空间-我喜欢你在这里的链接,我喜欢你为其他答案留下一些空间-