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