Unit testing 如何在KDevelop中将自定义构建步骤添加到基于汽车制造的项目中? 我最近开始使用C++和KDevelop进行个人编码项目的工作。虽然我一开始只是随便乱闯,但我认为如果我在做得太深入之前设置一个合适的单元测试套件,从长远来看会更好。我已经创建了一个单独的测试运行程序可执行文件作为子项目,我添加到其中的测试似乎运行正常。到目前为止,我们取得了成功

Unit testing 如何在KDevelop中将自定义构建步骤添加到基于汽车制造的项目中? 我最近开始使用C++和KDevelop进行个人编码项目的工作。虽然我一开始只是随便乱闯,但我认为如果我在做得太深入之前设置一个合适的单元测试套件,从长远来看会更好。我已经创建了一个单独的测试运行程序可执行文件作为子项目,我添加到其中的测试似乎运行正常。到目前为止,我们取得了成功,unit-testing,automake,kdevelop,Unit Testing,Automake,Kdevelop,然而,我真的希望每次构建时都能运行单元测试,而不仅仅是在显式运行它们时。尤其是当我将我所造成的混乱分解成便利库时,情况会更糟,每个库可能都有自己的测试可执行文件。我想让它们作为构建过程的最后一步来运行,而不是手动运行它们。我已经查看了项目菜单和汽车制造商经理中的所有选项,但我不知道如何设置 我想这可以通过手工编辑makefile来实现。不幸的是,我的makefile有点弱,而且我还担心KDevelop可能会在下次通过IDE更改某些内容时覆盖我手工所做的任何更改。因此,如果有一个关于如何通过KDe

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

我想这可以通过手工编辑makefile来实现。不幸的是,我的makefile有点弱,而且我还担心KDevelop可能会在下次通过IDE更改某些内容时覆盖我手工所做的任何更改。因此,如果有一个关于如何通过KDevelop本身实现这一点的选项,我更愿意这样做

有人知道如何让KDevelop在构建过程中运行测试可执行文件吗?谢谢大家!

(我与KDevelop没有100%的联系。如果KDevelop做不到这一点,或者如果有一个IDE使这更容易,我可能会被说服切换。)

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

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

核对 然后,您可以轻松地配置KDevelop 要运行“进行检查”,而不仅仅是“进行检查”。

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

测试=。。。 请看一下这本书
了解更多信息。

我是这样做的:

$ 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
现在,我尝试将其封装为m4宏,如下所示:

MAKE_UNITTEST(base64.c)
这将产生类似于上述解决方案的结果

希望这有帮助

TESTS = ...
$ 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 check
...
PASS: base64-test
==================
All 1 tests passed
==================
...
MAKE_UNITTEST(base64.c)