你如何进行单元测试?编译器标志?静态库?

kur*_*ige 14 c++ tdd unit-testing application-design

我刚刚开始使用TDD,并且很好奇其他人采取什么方法来运行他们的测试.作为参考,我使用谷歌测试框架,但我相信这个问题适用于大多数其他测试框架和C/C++以外的语言.

到目前为止,我的一般方法是做三件事之一:

  1. 将大部分应用程序写入静态库,然后创建两个可执行文件.一个可执行文件是应用程序本身,而另一个是具有所有测试的测试运行器.两者都链接到静态库.

  2. 将测试代码直接嵌入到应用程序本身中,并使用编译器标志启用或禁用测试代码.这可能是我迄今为止使用过的最好的方法,但是稍微混乱了代码.

  3. 将测试代码直接嵌入到应用程序本身中,并且在给定某些命令行开关的情况下,运行应用程序本身或运行应用程序中嵌入的测试.

这些解决方案都不是特别优雅 ......

你是怎么做到的?

qua*_*ana 6

你的方法没有.1是我在C/C++和Java中总是这样做的方式.大多数应用程序代码都在静态库中,我尝试将应用程序所需的额外代码量保持在最低限度.

我在Python和其他动态语言中处理TDD的方式略有不同,因为我留下了应用程序和测试的源代码,测试运行器找到测试并运行它们.


Len*_*ate 3

我倾向于使用静态库而不是 dll,因此我的大部分 C++ 代码最终都会出现在静态库中,而且正如您所发现的,它们与 dll 一样易于测试。

对于构建到 exe 中的代码,我要么有一个单独的测试项目,其中仅包含正在测试且通常构建到 exe 中的源文件,要么构建一个新的静态库,其中包含大部分 exe 并在与我测试所有其他静态库的方式相同。我发现在新项目中我通常采用“库中的大部分代码”方法,而当我对现有应用程序进行测试时,通常会采用“将源文件从 exe 项目拉入测试项目”方法。

我根本不喜欢你的选择2和3。管理 2 的构建配置可能比拥有一个单独的测试项目更困难,该测试项目只是简单地提取所需的源代码并将所有测试包含到 exe 中,正如您在 3 中建议的那样,这是错误的;)