Generic Test harness for java.util.Map?

2022-09-04 04:20:51

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

我看起来它在最基本的条件下工作。由于它非常复杂,我确信必须有大量的潜伏错误w.r.t线程安全,不规则的操作顺序等等。

由于 Map 接口的合约定义良好,我确信必须存在一个通用测试集合来检查角情况、线程安全性等。

我听说Google Collections为他们的库运行了大约25000个单元测试。是否可以在某个地方下载它们?


答案 1

Google Collections zip 包含他们的测试。那里应该有一个google-collect-testfw jar。

具体来说,Map的总合约有一个抽象的测试。


答案 2

您可能希望查看Google收藏夹是否有适合您需求的内容,这样您就不必支持自己的地图。例如,参见 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);
}

请注意,地图在构造后不会显示完全不可变,因为使用以前未见过的键执行 a 将更改所看到的map.get(key)Map.entrySet()

如果您需要编写自定义Map实现,并希望为您的测试提供良好的起点,那么Adam关于使用Google Collections的MapInterfaceTest的建议是一个很好的建议。


推荐