Visual C ++ переопределяет / макет объектов для модульного тестирования? - PullRequest
0 голосов
/ 06 мая 2010

Когда я запускаю модульные тесты, я хочу иметь возможность «заглушить» или создать фиктивный объект, но я сталкиваюсь с 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)? Есть ли другой вариант?

1 Ответ

0 голосов
/ 06 мая 2010

Линкеры будут искать библиотеку только в том случае, если функция не найдена в списке связанных объектных модулей. Решение состоит в том, чтобы встроить ваши заглушки в объектные модули, связанные с модулями тестового драйвера.

...