Общий тестовый пакет для java.util.Map?
-
21-08-2019 - |
Вопрос
У меня есть собственная реализация интерфейса 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 КартаИнтерфейсТест хороший.