Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.util.Map的通用测试工具?_Java_Unit Testing_Collections_Guava - Fatal编程技术网

java.util.Map的通用测试工具?

java.util.Map的通用测试工具?,java,unit-testing,collections,guava,Java,Unit Testing,Collections,Guava,我有一个映射接口的自定义实现,它做了一些奇特的事情,比如函数的惰性求值。从外部构造后,实现应该是不可变的(例如,不支持put()和putAll()方法) 我觉得它在最基本的条件下工作。由于它相当复杂,我确信一定有大量潜伏的bug w.r.t线程安全、不规则的操作顺序等等 由于映射接口的契约是定义良好的,因此我确信必须存在一个通用测试集合,用于检查转角情况、线程安全性等 我听说Google Collections为其库运行了大约25000个单元测试。有可能在某处下载它们吗?zip包含了它们的测试。

我有一个映射接口的自定义实现,它做了一些奇特的事情,比如函数的惰性求值。从外部构造后,实现应该是不可变的(例如,不支持put()和putAll()方法)

我觉得它在最基本的条件下工作。由于它相当复杂,我确信一定有大量潜伏的bug w.r.t线程安全、不规则的操作顺序等等

由于映射接口的契约是定义良好的,因此我确信必须存在一个通用测试集合,用于检查转角情况、线程安全性等

我听说Google Collections为其库运行了大约25000个单元测试。有可能在某处下载它们吗?

zip包含了它们的测试。那里应该有一个google collect testfw jar

您可能想看看是否有满足您需要的东西,这样您就不必支持自己的地图。比如说,

private Map createMap(){
ConcurrentMap graphs=new MapMaker()
.1级(32)
.软键()
.weakValues()
.有效期(30,时间单位:分钟)
.makeComputingMap(
新函数(){
公共图形应用(密钥){
返回createExpensiveGraph(键);
}
});
返回集合。不可修改的映射(图形);
}
请注意,映射在构造后不会显示为完全不变,因为使用以前未看到的键执行
map.get(key)
将更改
map.entrySet()所看到的内容


如果您需要编写一个自定义映射实现,并且希望为测试找到一个良好的起点,Adam建议使用Google Collections,这是一个很好的建议。

深入了解svn。这里似乎有很多有前途的东西。在我的例子中,给出值的另一种方式是计算键
private Map<Key, Graph> createMap() {
  ConcurrentMap<Key, Graph> graphs = new MapMaker()
     .concurrencyLevel(32)
     .softKeys()
     .weakValues()
     .expiration(30, TimeUnit.MINUTES)
     .makeComputingMap(
        new Function<Key, Graph>() {
          public Graph apply(Key key) {
            return createExpensiveGraph(key);
          }
        });
  return Collections.unmodifiableMap(graphs);
}