C++ 单元测试本机 C++
C++ Unit Test Native C++
首先,介绍一下背景:
在工作中,我继承了一个大型 C++ 程序(我已经 12 年没有广泛使用的语言)。为了帮助自己更好地理解应用程序以及它如何组合在一起,我想,"I love TDD, why not write some unit tests!"。从那以后,我花了两天时间来编译一个简单的单元测试。我正处于它到达链接器的位置,但出现以下错误:
CIniReader* reader = new CIniReader("");
Error 3 error LNK2019: unresolved external symbol "public: __thiscall CIniReader::CIniReader(char *)" (??0CIniReader@@$$FQAE@PAD@Z) referenced in function "public: void __clrcall ApogeeTests::UnitTest1::TestMethod1(void)" (?TestMethod1@UnitTest1@ApogeeTests@@$$FQ$AAMXXZ) C:\Users\champad\Documents\Applications\Leading Hedge\src\Apogee.Tests\UnitTest1.obj Apogee.Tests
现在,我可以解决这个问题,将它所在的项目设置为静态库,而不是 DLL 项目(属性 -> 配置属性 -> 常规 -> 配置类型)。
我的问题是:我必须这样做吗?似乎必须有一种方法让链接器在编译时识别它需要的功能,而不必在我想要单元测试时不断地将所有 24 个项目切换到 lib,并在我需要部署它时返回。
有什么想法吗?
虽然不完全是我想要的,但这就是我正在做的,除非有人有更好的建议!
我添加了一个新的项目配置并将其命名为 UnitTesting。在该配置下,所有的 C++ 项目都是单元测试项目可以引用的静态库。我想我在部署之前更改了配置,所以这对我来说很容易记住。
虽然不理想,但这是可行的。但如果有更好的方法,请告诉我!
Visual Studio 为您创建的每个 DLL 创建一个静态库,专门用于 link 使用客户端代码。
如果您的项目有以下模块:
core-functionality.dll
unit-tests.exe
然后你的 unit-tests.exe 将使用 LoadLibrary 和 family 从 core-functionality.dll 加载 API,并将生成的函数指针转换为正确的类型(这很丑陋,容易出错并且很难维护),或者它可以 link 静态地反对核心功能。lib(这应该在核心-functionality.dll 的构建过程中生成)。
我想你正在寻找第二种选择。
首先,介绍一下背景:
在工作中,我继承了一个大型 C++ 程序(我已经 12 年没有广泛使用的语言)。为了帮助自己更好地理解应用程序以及它如何组合在一起,我想,"I love TDD, why not write some unit tests!"。从那以后,我花了两天时间来编译一个简单的单元测试。我正处于它到达链接器的位置,但出现以下错误:
CIniReader* reader = new CIniReader("");
Error 3 error LNK2019: unresolved external symbol "public: __thiscall CIniReader::CIniReader(char *)" (??0CIniReader@@$$FQAE@PAD@Z) referenced in function "public: void __clrcall ApogeeTests::UnitTest1::TestMethod1(void)" (?TestMethod1@UnitTest1@ApogeeTests@@$$FQ$AAMXXZ) C:\Users\champad\Documents\Applications\Leading Hedge\src\Apogee.Tests\UnitTest1.obj Apogee.Tests
现在,我可以解决这个问题,将它所在的项目设置为静态库,而不是 DLL 项目(属性 -> 配置属性 -> 常规 -> 配置类型)。
我的问题是:我必须这样做吗?似乎必须有一种方法让链接器在编译时识别它需要的功能,而不必在我想要单元测试时不断地将所有 24 个项目切换到 lib,并在我需要部署它时返回。
有什么想法吗?
虽然不完全是我想要的,但这就是我正在做的,除非有人有更好的建议!
我添加了一个新的项目配置并将其命名为 UnitTesting。在该配置下,所有的 C++ 项目都是单元测试项目可以引用的静态库。我想我在部署之前更改了配置,所以这对我来说很容易记住。
虽然不理想,但这是可行的。但如果有更好的方法,请告诉我!
Visual Studio 为您创建的每个 DLL 创建一个静态库,专门用于 link 使用客户端代码。
如果您的项目有以下模块:
core-functionality.dll
unit-tests.exe
然后你的 unit-tests.exe 将使用 LoadLibrary 和 family 从 core-functionality.dll 加载 API,并将生成的函数指针转换为正确的类型(这很丑陋,容易出错并且很难维护),或者它可以 link 静态地反对核心功能。lib(这应该在核心-functionality.dll 的构建过程中生成)。
我想你正在寻找第二种选择。