(1)断言assertEquals的使用
在实现MultiIntervalSet的测试方法时,用到了这样一段测试:
try{
test.insert(10, 20, "A");
test.insert(30, 40, "A");
test.insert(20, 30, "B");
}catch(IntervalConflictException e) {
e.printStackTrace();
}
assertEquals(true,test.removeAll("A"));//返回值
temp.add("B");
assertEquals(temp,test.labels());//查看任务标签确认是否已移除
assertEquals(false,test.removeAll("C"));//返回值
try {
test1.insert(20, 30, 0);
}catch(IntervalConflictException e) {
e.printStackTrace();
}
assertEquals(test1,test.intervals("B"));//这句话运行不通过
在最后一行的断言处,assertEquals一直向外抛出异常,而实际上此时比较的两个对象内容应该是相同的。结合课上讲过的知识,最终判定这里是因为采用了引用等价性的比较而不是对象等价性的比较。使用assertEquals相当于对两个对象使用Equals,而当类型IntervalSet没有重写Equals方法时,使用Equals和使用==的结果是相同的,即直接判断两个对象是否指向同一块内存空间。所以在这里比较时,即使内容一样,也仍然会得到false的结果。最终解决:
try{
test.insert(10, 20, "A");
test.insert(30, 40, "A");
test.insert(20, 30, "B");
}catch(IntervalConflictException e) {
e.printStackTrace();
}
assertEquals(true,test.removeAll("A"));//返回值
temp.add("B");
assertEquals(temp,test.labels());//查看任务标签确认是否已移除
assertEquals(false,test.removeAll("C"));//返回值
try {
test1.insert(20, 30, 0);
}catch(IntervalConflictException e) {
e.printStackTrace();
}
assertEquals(20,test.intervals("B").start(0));
assertEquals(30,test.intervals("B").end(0));
把对象的比较具体为内部属性的比较。