9

我的问题与之前提出的问题非常相关,但我需要一些实用的建议。

我手中有“有效地使用遗留代码”,并且在我正在从事的项目中阅读这本书时,我正在使用书中的建议。该项目是一个 C++ 应用程序,由几个库组成,但代码的主要部分被编译为单个可执行文件。当我不得不触摸某些东西时,我正在使用 googletest 将单元测试添加到现有代码中。

我的问题是如何设置构建过程以便构建单元测试,因为有两个不同的可执行文件需要共享代码,而我无法将代码从“被测”应用程序中提取到库中。现在我已经为包含单元测试链接的应用程序创建了我的构建过程,该链接针对从主应用程序的构建过程生成的目标文件,但我真的不喜欢它。有什么建议吗?

4

5 回答 5

2

有效地使用遗留代码是如何开始测试旧代码的最佳资源。确实没有不会导致事情变得更糟的短期解决方案。

于 2008-10-21T20:54:52.423 回答
2

我将勾勒出您可以使用的 makefile 结构:

all: tests executables

run-tests: tests
    <commands to run the test suite>

executables: <file list>
    <commands to build the files>

tests: unit-test1 unit-test2 etc

unit-test1: ,files that are required for your unit-test1>
    <commands to build unit-test1>

作为我项目的唯一开发人员,这大致就是我所做的

于 2008-10-21T21:36:17.410 回答
1

如果您的测试应用程序仅链接它需要测试的目标文件,那么您实际上已经将它们视为一个库,那么应该可以将这些目标文件分组到一个单独的库中,用于主应用程序和测试应用程序。如果你不能,那么我不认为你正在做的事情太糟糕了。

如果您必须链接其他未测试的目标文件,那么这表明需要打破依赖关系,您拥有完美的书。我们有类似的问题并使用 Vlion 建议的系统

于 2008-10-22T06:49:41.473 回答
0

我个人会像您一样继续这样做,或者考虑使用一个构建脚本来同时进行目标应用程序和单元测试(两个生成的二进制文件来自同一个代码库)。是的,它闻起来很腥,但它非常实用。

向你致敬,祝你测试顺利。

于 2008-10-21T20:56:54.430 回答
0

我更喜欢每个测试一个测试可执行文件。这启用了链接时接缝,还有助于允许 TDD,因为您可以在一个单元上工作而不必担心其余代码。

我使库依赖于所有测试。希望这意味着您的测试仅在代码实际更改时运行。

如果您确实失败了,测试将在正确的位置中断构建过程。

于 2008-10-21T21:33:34.357 回答