Вопрос

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

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

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

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

Это было полезно?

Решение

А Коллекции Google zip содержит их тесты.Там должен быть jar google-collect-testfw.

В частности, существует абстрактный тест для общего контракта Map.

Другие советы

Возможно, вы захотите посмотреть, если Коллекции Google есть что-то, что соответствует вашим потребностям, поэтому вам не нужно поддерживать свою собственную карту.См., например, Картограф

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 КартаИнтерфейсТест хороший.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top