Когда я запускаю модульные тесты, я хочу иметь возможность «заглушить» или создать фиктивный объект, но я сталкиваюсь с DLL Hell.
Например: построены две библиотеки DLL: A.dll и B.dll - классы в A.dll имеют вызовы классов в B.dll, поэтому при сборке A.dll в строке ссылки использовался B. Lib для определений.
Мой тестовый драйвер (Foo.exe) тестирует классы в A.dll, поэтому он ссылается на A.lib. Тем не менее, я хочу "заглушить" некоторые вызовы, которые A.dll делает с B.dll в простых версиях (вернуть базовое значение, не искать БД и т. Д.).
Я не могу создать Override.dll, который просто переопределяет необходимые методы (не целые классы), и заменить B.dll, потому что Foo.exe будет A), жалуются, что B.dll отсутствует, если я просто удаляю его и помещаю Override .dll на своем месте или B) если я переименую Override.dll в B.dll, Foo.exe жалуется, что есть неразрешенные символы, потому что Override.dll не является полной реализацией B.dll.
Есть ли способ сделать это? Есть ли способ статически связать Foo.exe с A.lib, B.lib и Override.lib так, чтобы он работал без полной перестройки A.lib и B.lib для удаления __delcspec (dllexport)? Есть ли другой вариант?