我刚刚开始使用TDD,并且很好奇其他人采用什么方法来运行他们的测试。作为参考,我使用谷歌测试框架,但我相信这个问题适用于大多数其他测试框架和C / C ++以外的语言。
到目前为止,我的一般做法是做三件事之一:
将大部分应用程序写入静态库,然后创建两个可执行文件。一个可执行文件是应用程序本身,而另一个是具有所有测试的测试运行器。两者都链接到静态库。
将测试代码直接嵌入到应用程序本身中,并使用编译器标志启用或禁用测试代码。这可能是我到目前为止使用过的最好的方法,但稍微混乱了代码。
将测试代码直接嵌入到应用程序本身中,并且在给定某些命令行开关的情况下,运行应用程序本身或运行应用程序中嵌入的测试。
这些解决方案都不是特别优雅 ......
你怎么做?
答案 0 :(得分:5)
你的方法没有。 1是我在C / C ++和Java中总是这样做的方式。大多数应用程序代码都在静态库中,我尝试将应用程序所需的额外代码量保持在最低限度。
我在Python和其他动态语言中处理TDD的方式略有不同,因为我留下了应用程序和测试的源代码,测试运行器找到测试并运行它们。
答案 1 :(得分:3)
我使用两种方法,对于dll,我只是简单地将我的单元测试与dll链接起来。对于可执行文件,我包括可执行项目和单元测试项目中正在测试的源文件。这略微增加了构建时间,但意味着我不需要将可执行文件分成静态库和主函数。
我使用boost.test进行单元测试,并使用cmake生成项目文件,我发现这是最简单的方法。此外,我正在慢慢地将单元测试引入大型遗留代码库,因此我尝试引入最少量的更改,以防我给其他开发人员带来不便并阻止他们进行单元测试。我担心使用静态库仅用于单元测试可能被视为不采用它的借口。
话虽如此,我认为静态库方法很好,特别是如果你从头开始。
答案 2 :(得分:3)
对于C / C ++应用程序,我尝试在一个或多个dll中拥有尽可能多的代码,主应用程序是启动和传递到dll的最小值。 Dll更容易测试,因为它们可以导出尽可能多的入口点,以供测试应用程序使用。
我使用链接到Dll的单独测试应用程序。我非常赞成将测试代码和“产品”代码保存在单独的模块中。
答案 3 :(得分:3)
我倾向于支持静态库而不是dll,所以我的大多数C ++代码最终都是静态库,而且正如你所发现的那样,它们和dll一样容易测试。
对于构建到exe的代码,我要么有一个单独的测试项目,它只包含正在测试的源文件,并且通常内置在exe中,或者我构建一个包含大部分exe和test的新静态库这与我测试所有其他静态库的方式相同。我发现我通常使用新项目采用“库中代码最多”的方法,并且当我将测试复制到现有应用程序时,将“将exe文件中的源文件拉入测试项目”方法。
我根本不喜欢你的选择2和3。管理2的构建配置可能比单独的测试项目更难,只需简单地提取所需的源代码,并将所有测试包含在exe中,正如你在3中所建议的那样是错误的;)
答案 4 :(得分:2)
我选择#1,其中一些原因是
对于C ++构建和测试,我喜欢使用CMake,它可以运行一系列目标可执行文件作为测试并打印结果摘要。
答案 5 :(得分:0)
个人而言,我使用的另一种方法依赖于你的方法:
我保持项目测试完好无损。如果它是可执行文件,它应该保持可执行文件。您只需创建一个后期构建操作,以便将所有obj文件聚合到一个静态库中。
然后,您可以创建测试项目,链接测试框架和先前生成的静态库。
以下是与您的问题相对应的一些主题:
答案 6 :(得分:-2)
我正在使用第三方测试运行器及其框架,并在构建脚本中包含测试。测试不在生产代码中(外部dll)。