Я программирую в основном на scala и java, используя scalatest в scala и junit для модульного тестирования. Я хотел бы применить одни и те же тесты к нескольким реализациям одного и того же интерфейса/признака. Идея состоит в том, чтобы убедиться, что контракт интерфейса соблюдается, и проверить принцип подстановки Лискова.
Например, при тестировании реализации списков тесты могут включать:
- Экземпляр должен быть пустым тогда и только тогда и только тогда, когда он имеет нулевой размер.
- После вызова очистки размер должен быть равен нулю.
- Добавление элемента в середину списка увеличивает на единицу индекс правых элементов.
- и т.п.
Каковы лучшие практики?