Gtest测试项目链接到其他可执行文件

时间:2016-11-23 08:42:25

标签: c++ visual-studio unit-testing googletest

我有一个项目,我添加了一个gtest项目,然后将原始项目转换为.lib项目,并从第3个新项目调用其main()函数。这样,我可以使用项目.exe构建测试.exe。除外,它不起作用。

这些是我提到的here 之后的步骤 创建或打开一个项目,然后为它创建一个Win32控制台应用程序测试项目 右键单击测试项目,转到属性,然后将“配置”设置为“调试” 转到配置属性> C / C ++ > 常规> 其他包含目录并添加gtest includes文件夹。
在代码生成> 运行时库下,选择MDt或MTd;任何被测试项目使用的内容 在链接器> 常规> 其他库目录下,使用gtestd.lib添加对该文件夹的引用。
在输入> 附加依赖项下,添加gtestd.lib 右键单击测试项目,转到属性,然后将Configuration设置为release,然后执行步骤3和4 在链接器> 常规> 其他库目录下,使用gtest.lib添加对该文件夹的引用。
在输入> 附加依赖项下,添加gtest.lib。

这些是我在链接测试项目时所遵循的步骤,如上所述here
右键单击测试项目,转到Build Dependencies > Project Dependencies,然后添加要测试的项目。
转到属性> C / C ++ > 常规> 其他包含目录并包含要测试的项目标题。
在链接器> 输入> 附加依赖项下,输入项目的.lib文件

以下是问题
出于某种原因,测试项目令人惊讶地工作,但仅限于发布模式。尽管设置与测试项目具有相同的设置,但包装器项目在任一模式下都不起作用。我已经看了20个可能的解决方案,还没找到一个。我还在库项目的每个方法前面尝试过 __ declspec(dllexport),但这并不公平。 VS正在和我打交道。

我试过的其他东西
我不想在每次需要测试时更改项目以构建.lib。所以我考虑使用预链接构建事件从项目中创建 .exe .lib ,但它似乎只接受控制台命令而我不能&#39 ;弄清楚如何从我从另一个SO答案得到的控制台命令中连接生成的.lib文件。

以下是包含这些问题的当前.sln文件。网址是绝对的:https://drive.google.com/file/d/0B6r81tGW7hODeXNpR3ROc3hYMWc/view?usp=sharing

我如何简单地创建一个测试项目和包装器项目来启动一个正常项目(在调试和发布模式下都有效)?

1 个答案:

答案 0 :(得分:1)

修正:

  1. 在SimpleCalc(调试)中,将Project | Properties | General | Configuration type更改为Static Library。这就是Release工作的原因,但Debug没有。
  2. 对于SimpleCalcWrapper,选择Project | Add reference...并添加SimpleCalc。这就是SimpleCalcWrapper无法正常工作的原因。
  3. 对于SimpleCalcTest(发布),重置为默认Project | Properties | Linker | Advanced | Import Library或SimpleCalcTest.exe将无法编译。
  4. 对于SimpleCalcTest,将Project | Properties | C/C++ | Additional Include Directories更改为$(SolutionDir)\gtest\include;$(SolutionDir)\SimpleCalc;%(AdditionalIncludeDirectories)。这将使他们相对于项目。
  5. 对于SimpleCalcTest,将Project | Properties | Linker | Additional Library Directories更改为$(SolutionDir)\gtest;%(AdditionalLibraryDirectories) - 您不需要SimpleCalc目录,因为该项目已添加到参考中。
  6. 对于SimpleCalcWrapper,将Project | Properties | C/C++ | Additional Include Directories更改为$(SolutionDir)\SimpleCalc;%(AdditionalIncludeDirectories)
  7. 对于SimpleCalcWrapper,重置为默认Project | Properties | Linker | Additional Library Directories - 您不需要SimpleCalc目录,因为该项目已添加到引用中。