代码之家  ›  专栏  ›  技术社区  ›  Andreas Petersson

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

  •  14
  • Andreas Petersson  · 技术社区  · 15 年前

    我有一个映射接口的自定义实现,它执行一些有趣的事情,比如对函数的延迟评估。在从外部构造之后,实现应该是不可变的(例如,不支持put()和putall()方法)

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

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

    我听说Google收藏为他们的图书馆运行了大约25000个单元测试。是否可以从某个地方下载?

    2 回复  |  直到 15 年前
        1
  •  7
  •   Adam Jaskiewicz    15 年前

    这个 Google Collections zip包含他们的测试。里面应该有一个谷歌收集的testfw jar。

    Specifically, there's an abstract test for the general contract of Map.

        2
  •  0
  •   NamshubWriter    15 年前

    你可能想看看 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()

    如果你需要编写一个自定义的地图实现,并且想从一个好的地方开始你的测试,那么亚当建议你使用谷歌收藏的 MapInterfaceTest 是一个好的。