HIT2021春软件构造lab3学习过程&问题解决记录

(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));

把对象的比较具体为内部属性的比较。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值