14

関数の遅延評価など、いくつかの凝った処理を行う Map インターフェースのカスタム実装があります。実装は、外部からの構築後に不変に見える必要があります (たとえば、put() および putAll() メソッドはサポートされていません)。

最も基本的な条件で動作するようです。それは非常に複雑なので、スレッドの安全性、操作の不規則な順序など、数多くのバグが潜んでいるに違いないと確信しています..

Map インターフェイスのコントラクトは明確に定義されているため、コーナー ケースやスレッド セーフなどをチェックする一般的なテスト コレクションが存在する必要があると確信しています。

Google Collections では、ライブラリに対して約 25000 の単体テストを実行していると聞いています。それらをどこかにダウンロードすることは可能ですか?

4

2 に答える 2

7

Google コレクションのzip には、テストが含まれています。そこに google-collect-testfw jar があるはずです。

具体的には、Map の一般契約の抽象的なテストがあります。

于 2009-05-14T17:34:33.670 に答える
0

独自のマップをサポートする必要がないように、ニーズを満たすものが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);
}

map.get(key)以前に見えなかったキーで を実行すると、Map.entrySet()

カスタム Map 実装を作成する必要があり、テストを開始するのに適した場所が必要な場合は、Google Collections のMapInterfaceTestを使用するという Adam の提案が適切です。

于 2009-05-14T18:17:34.813 に答える