Общий тестовый жгут для java.util.Map?

У меня есть пользовательская реализация интерфейса Map, которая делает некоторые причудливые вещи, такие как ленивая оценка функций. реализация должна появиться неизменной после построения извне (например, не поддерживаются методы put() и putAll())

Мне кажется, он работает в самых основных условиях. Поскольку он довольно сложный, я уверен, что в нем должно быть множество скрытых ошибок w.r.t безопасности потоков, нерегулярного порядка операций и многое другое.

Так как контракт интерфейса карты четко определен, я уверен, что в нем должна быть общая коллекция тестов, которая проверяет угловые случаи, безопасность потоков и т.д.

Я слышал, что Google Collections запускает около 25000 модульных тестов для своей библиотеки. Можно ли их загрузить где-нибудь?

Ответы

Ответ 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);
}

Обратите внимание, что после построения карта не станет полностью неизменной, так как выполнение map.get(key) с ранее невидимым ключом изменит то, что видно на Map.entrySet()

Если вам нужно написать пользовательскую реализацию карты и хотите найти подходящее место для ваших тестов, Адам предлагает использовать Google Collections MapInterfaceTest является хорошим.