我有一个Map接口的自定义实现,它做了一些奇特的东西,比如懒惰的函数评估。从外部构造后,实现应该是不可变的(例如,不支持put()和putAll()方法)
我看起来它在最基本的条件下工作。由于它非常复杂,我相信必须有大量潜伏的错误,因为线程安全,操作顺序不规律等等。
由于Map接口的合约定义明确,我确信必须存在一个通用测试集合,用于检查角落情况,线程安全等。
我听说Google Collections为其库运行了大约25000个单元测试。是否可以在某处下载它们?
答案 0 :(得分:7)
Google Collections zip包含他们的测试。那里应该有一个google-collect-testfw jar。
Specifically, there's an abstract test for the general contract of Map.
答案 1 :(得分:0)
您可能希望查看Google Collections是否符合您的需求,因此您无需支持自己的地图。例如,请参阅MapMaker
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);
}
请注意,构建后地图不会显示为完全不可变,因为使用以前看不见的密钥执行map.get(key)
会更改Map.entrySet()
如果您需要编写自定义地图实施并想要开始测试,Adam建议使用Google Collections的MapInterfaceTest是一个很好的建议。