Большая часть этой массы тестов предназначена для реализации коллекций Guava. Они написали общие тесты, которые всесторонне тестируют интерфейсы коллекции, и это генерирует набор для реализации. Смотрите, например, классы , называемых CollectionAddAllTester, ListIndexOfTester.
Все это поддерживается библиотекой testlib, которая поставляется как часть Guava. Это довольно общее. Он поддерживает написание общих тестов для любого интерфейса (не только коллекции). Вы можете указать Features возможных реализаций и протестировать их (например, если ваш набор немодифицируем, вы ожидаете другого результата set.add()), и при запуске тестов вы указываете, какие функции поддерживает ваша реализация.
Он основан на JUnit 3, а не 4. Обычно у вас есть класс, расширяющий TestCaseполный набор именованных методов testSomething(), и JUnit выполняет их рефлексивно. Библиотека testlib подключается к выполнению этих тестов, поэтому жизненный цикл выглядит следующим образом:
- Для каждой реализации вы хотите протестировать
- Для каждого (применимого) метода испытаний
- Создать
TestCaseэкземпляр
- Инициализируйте
TestSubjectGenerator- это интерфейс testlib, который вы расширяете, где вы фактически создаете объект тестирования
- Рефлексивно запустите метод испытаний. Во время этого метода
getSubjectGenerator()дает доступ к испытуемому
Ключевой бит является дополнительным этапом инициализации, который позволяет им вводить конкретного тестируемого в общий тестовый пример.
Я написал пост о том, как написать testlib, генерирующий наборы для ваших собственных интерфейсов.
(Также опубликовано на тот же вопрос на сайте sqa .)