相关疑难解决方法(0)

如何测试List <?extends Object>是一个UnmodifableList吗?

我正在寻找一种方法来测试一些给定的List是否是不可修改的.

我有一个对象,有一个List<NoMatter>,为了提供方法,addNoMatter(NoMatter nm)而不是允许API客户端只是做.getNoMatters().add(nm);我总是返回此列表的不可修改版本,所以客户端仍然能够拥有该列表.我按如下方式做到:

public List<NoMatter> getNoMatters() {
    return Collections.unmodifiableList(this.noMatters);
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我正在进行测试时,我只是无法检查此对象是否为UnmodifiableList类型.我的第一次尝试是:

@Test
public void checkIfListIsImmutable(){
    assertTrue("List is not immutable", this.myObj.getNoMatters() instanceof UnmodifiableList);
}
Run Code Online (Sandbox Code Playgroud)

碰巧我不能似乎能够导入类型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);
}
Run Code Online (Sandbox Code Playgroud)

编辑:上面的测试不授予我我处理的列表不是不可变的,因为我需要测试每个可能修改我的原始列表的方法,包括.remove(),. clear(),. shuffle ()等!这就是为什么我认为这不是一个很好的方法.

>>>但我仍然相信它甚至不是一个优雅的解决方案!<<<

java collections tdd unit-testing

19
推荐指数
4
解决办法
8387
查看次数

从 Iterable 创建 ImmutableList

我需要从 an 中的每个元素获取一个对象Iterable并将其添加到List.

我可以使用下面的代码来做到这一点。ImmutableList但是,有没有什么方法可以在不显式实例化的情况下创建 Guava List

List<Data> myList = new ArrayList<>();
myIterable.forEach(val ->
  myList.add(val.getMetaData())
);
Run Code Online (Sandbox Code Playgroud)

java guava java-8

2
推荐指数
1
解决办法
783
查看次数

标签 统计

java ×2

collections ×1

guava ×1

java-8 ×1

tdd ×1

unit-testing ×1