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