如何测试列表<?扩展对象>是不可修改列表?
我正在寻找一种方法来测试某些给定的列表是否是不可修改的列表。
我有一个对象,为了提供方法,例如,而不是允许API客户端简单地做,我总是返回此列表的不可修改版本,因此客户端仍然能够拥有该列表。我这样做如下:List<NoMatter>
addNoMatter(NoMatter nm)
.getNoMatters().add(nm);
public List<NoMatter> getNoMatters() {
return Collections.unmodifiableList(this.noMatters);
}
问题是,当我进行测试时,我根本无法检查此对象的类型是否为UnmodifiableList。我的第一次尝试是做:
@Test
public void checkIfListIsImmutable(){
assertTrue("List is not immutable", this.myObj.getNoMatters() instanceof UnmodifiableList);
}
碰巧我似乎无法导入类型,也不是我在控制台上尝试时得到的。UnmodifiableList
java.util.Collections$UnmodifiableRandomAccessList
System.out.println(myObj.getNoMatters().getClass().getName());
那么我该如何实现它呢???
PS.:我知道我可以通过以下操作通过此测试:
@Test(expected = UnsupportedOperationException.class)
public void checkIfListIsImmutable(){
this.myObj.getNoMatters().add(null);
}
编辑:上面的测试并没有让我知道我处理的列表不是不可变的,因为我需要对可能修改我的原始列表的每个方法进行测试,包括.remove(),.clear(),.shuffle()等!这就是为什么我不认为这是一个很好的方法。
>>>但我仍然相信它甚至没有接近一个优雅的解决方案!<<<