Ссылки на классы из проекта VC ++ .EXE из проекта модульных тестов .EXE - PullRequest
5 голосов
/ 28 марта 2012

У меня есть старое унаследованное приложение C ++, для которого я пытаюсь написать несколько модульных тестов. Я создал второй проект в своем решении, который основывается на исполняемом модульном тестировании (с использованием googletest). Тестовый проект ссылается на файлы заголовков из основного проекта. Тестовый проект работает нормально, пока я не попробую использовать один из классов основного проекта.

#include "stdafx.h"

#include "JsContext.h"
#include "gtest/gtest.h"

TEST(JsContextTests, CreateJsContext) {
  JsContext context; // linking fails as soon as this line is added
}

Производит ..

Error   1   error LNK2001: unresolved external symbol "public: __thiscall JsContext::JsContext(void)" (??0JsContext@@QAE@XZ)    JsContextTests.obj  tests
Error   2   fatal error LNK1120: 1 unresolved externals D:\Projects\Js-Clean\src\Debug\tests.exe    tests

Основной исполняемый файл не создает файл .lib, поэтому я не уверен, с чем мне следует связывать тестовый проект.

Каков наилучший подход к классам модульного тестирования из другого проекта EXE?

1 Ответ

6 голосов
/ 28 марта 2012

Если ваш основной проект не создает библиотеку, вам нужно создать ссылку на файл .obj, сгенерированный из JsContext.cpp, или на тот файл, который имеет источник JsContext.h. Тем не менее, это должно быть тривиально изменить ваш основной проект, чтобы встроить в статическую библиотеку вместо исполняемого файла. Это можно сделать в свойствах проекта в разделе Конфигурация -> Общие -> Тип конфигурации .

.

Если создание статической библиотеки невозможно, я думаю, что вашим лучшим выбором будет просто перекомпилировать исходные файлы в вашем тестовом проекте; Вы можете добавить фильтр «Основные зависимости проекта» и включать только исходные файлы, необходимые для того, что вы тестируете.

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

...