2

我最近开始使用 C++ 和 KDevelop 进行个人编码项目。虽然我一开始只是四处乱窜,但我认为从长远来看,如果我在走得更远之前设置一个适当的单元测试套件会更好。我已经创建了一个单独的测试运行程序可执行文件作为子项目,并且我添加到其中的测试似乎运行正常。至此,成功。

但是,我真的很想让我的单元测试在每次构建时都运行,而不仅仅是在我显式运行它们时。当我将我造成的混乱分解为便利库时尤其如此,每个便利库都可能有自己的测试可执行文件。与其手动运行它们,我想让它们作为构建过程的最后一步运行。我已经查看了项目菜单和 automake 管理器中的所有选项,但我不知道如何设置它。

我想这可能可以通过手动编辑makefile来完成。不幸的是,我的 makefile-fu 有点弱,而且我还担心下次我通过 IDE 更改某些内容时,KDevelop 可能会覆盖我手动所做的任何更改。因此,如果可以选择如何通过 KDevelop 本身执行此操作,我更愿意采用这种方式。

有谁知道我如何让 KDevelop 在构建过程中运行我的测试可执行文件?谢谢!

(我不是 100% 依赖 KDevelop。如果 KDevelop 不能做到这一点,或者如果有一个 IDE 可以让这变得更容易,我可能会被说服切换。)

4

2 回答 2

3

尽管您可以操纵默认的 `make` 目标来运行测试,但通常不建议这样做,因为每次调用

制作

将运行所有测试。您应该改用“检查”目标,这是软件包中公认的准标准。通过这样做,测试仅在您运行时开始

检查

然后,您可以轻松地将 KDevelop 配置为运行“make check”而不仅仅是“make”。

由于您使用的是 automake(通过 KDevelop),因此您不需要自己编写“检查”目标。相反,只需编辑您的“Makefile.am”并设置一些变量:

测试 = ...

请查看 automake 文档“支持测试套件” 以获取更多信息。

于 2008-09-20T13:00:57.777 回答
0

我是这样工作的:

$ cat src/base64.c
//code to be tested
int encode64(...) { ... }

#ifdef UNITTEST
#include <assert.h>
int main(int argc, char* argv[])
{
  assert( encode64(...) == 0 );
  return 0;
}
#endif //UNITTEST
/* end file.c */

$ cat src/Makefile.am
...
check_PROGRAMS = base64-test
base64_test_SOURCES = base64.c
base64_test_CPPFLAGS = -I../include -DUNITTEST
TESTS = base64-test

make 检查将构建 src/base64-test 并运行它:

$ make check
...
PASS: base64-test
==================
All 1 tests passed
==================
...

现在我试图将它全部封装为一个 m4 宏,以便像这样使用:

MAKE_UNITTEST(base64.c)

这应该会产生类似于上述解决方案的东西。

希望这可以帮助。

于 2011-12-22T18:49:33.850 回答