gpt4 book ai didi

java - 如何测试 List 是一个 UnmodifableList?

转载 作者:太空狗 更新时间:2023-10-29 22:32:59 25 4
gpt4 key购买 nike

我正在寻找一种方法来测试某个给定列表是否是不可修改的列表。

我有一个对象有 List<NoMatter> , 为了提供诸如 addNoMatter(NoMatter nm) 之类的方法而不是让 API 客户端简单地执行 .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() 等!这就是为什么我不认为这是一个很好的方式进行。

>>> 但我仍然认为它离优雅的解决方案还差得很远! <<<

最佳答案

我认为你的解决方案不仅合理,而且优雅。你想测试你不能修改列表,你的测试简洁地证明了这一点。测试类的名称测试的是名称,而不是行为。在这种情况下,谁在乎名字?

同样,如果我想测试我不能将 null 传递给某些方法,我会在测试中传递 null 并期待 IllegalArgumentException。

关于java - 如何测试 List<? extends Object> 是一个 UnmodifableList?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8364856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com