Модульный тестовый проект в CMake с зависимостями, без транзитивных зависимостей?

Я работаю над большим проектом, и у нас возникают проблемы с использованием макетов в наших модульных тестах. Основная проблема заключается в том, что у нас не все зависимости установлены правильно, но, решая это, мы обнаруживаем, что из-за переходных зависимостей проекты модульных тестов получают ссылку на реализацию, а не на имитацию.

Я думаю, что это можно решить, сделав так, чтобы он зависел от тестируемого модуля без его зависимостей, затем от макетов, а затем от любых явных вещей, которые вы хотели бы добавить к этому, но я не могу понять, как зависеть только на тестируемом модуле, а не на нем плюс зависимости.

Как я могу это исправить?

Например, cmakefile выглядит так:

add_library(UnitUnderTest $(SOURCES))
target_link_libraries(UnitUnderTest PUBLIC Sockets SomethingElse)
add_executable(TestForUnit $(TESTSOURCES))
target_link_libraries(TestForUnit PUBLIC UnitUnderTest MockSockets)

и TestForUnit сначала разрешает Sockets (потому что это зависимость), а затем вызывает конфликты в MockSockets, так как он имеет тот же набор символов, что и Sockets. Я действительно не хочу удалять все зависимости везде, так как тестируемый модуль может (и будет во многих случаях) зависеть от десятков других компонентов, которые вам затем придется переопределять везде, не говоря уже о том, что вы потеряете доступ к включите путь для этого компонента.

1

Решение

Задача ещё не решена.

Другие решения