Не уверен, что вы делаете, но если вы хотите предоставить общие интерфейсы для различных структур данных, которые затем могут быть реализованы и / или специализированы различными способами, я не понимаю, как вы могли бы написать тесты для любого конкретного реализация, которая еще не существует.
Вы можете написать тесты для общего интерфейса, чтобы убедиться, что все реализации выполняют контракт, указанный этим интерфейсом. Например. все реализации отсортированного дерева должны правильно упорядочивать свои элементы и т. д. В качестве примечания следует отметить, что на самом деле это будет не модульный тест, а тест функциональности / приемочного тестирования.
Для красно-черных деревьев вы можете написать набор дополнительных (необязательных) тестов, чтобы убедиться, что дерево правильно переупорядочено после вставок и удалений. Это может и, тем не менее, должно быть протестировано через открытый интерфейс. Например. добавьте серию элементов в дерево таким образом, чтобы дерево стало неуравновешенным без переупорядочения, затем проверьте структуру дерева, чтобы убедиться, что оно переупорядочено правильно.