【发布时间】:2015-05-02 16:18:53
【问题描述】:
如何使用 assertEquals 为方法 Boolean isEqual(Semester term) 创建一个测试方法,在类 Semester 中使用布尔类型?
这是学期类的代码和学期类的junit测试
学期
public class Semester {
private String year;
private String name;
public Semester() {
year = null;
name = null;
}
public Semester(String year, String name) {
this.year = year;
this.name = name;
}
public boolean isEqual(Semester semestr) {
return ((semestr.name.equals(this.name)) && (semestr.year
.equals(this.year)));
}
public String getYear() {
return year;
}
public String getName() {
return name;
}
}
学期测试
public class SemesterTestCase1 {
private Semester semster=new Semester("2014","Fall");
@Test
public void testIsEqual() {
}
@Test
public void testGetYear() {
assertEquals("2014",semster.getYear());
}
@Test
public void testGetName() {
assertEquals("Fall",semster.getName());
}
}
【问题讨论】:
-
assertEquals(true, actualValue)和assertEquals(false, actualValue)都可以。还有assertTrue(actualValue)和assertFalse(actualValue)。您是否查看过Asserts类的 JavaDoc?如果这些选项不起作用,请告诉我们为什么它们不起作用,更重要的是,告诉我们您实际想要完成的工作。 -
别忘了测试
NullPointerExceptions。 -
您需要覆盖
equals而不是定义自己的isEqual才能使用assertEquals。 -
@user2418306 不一定。
equals有它必须遵守的非常具体的合同,而像isEqual这样的自定义方法可以做任何它想做的事情。肯定有时间你想要一个而不是另一个。例如,假设您有一个带有id字段以及姓名和出生日期的Person对象。equalsonly 检查id可能是有意义的,因为如果您有Map<Person, Job>,您希望通过 id 来唯一标识每个人。但您可能还想检查两个Person对象是否具有所有相同的值,自定义isEqual更合适。 -
@yshavit 你能说出自定义方法可能违反的 equals 合约的规则吗?如果在您的域中,您可以保证
Person.id是唯一的,那么竞争其余字段的意义何在?否则,您的地图将无法正常工作。