c – 如何编译和链接单元测试?

c – 如何编译和链接单元测试?,第1张

概述我最近开始尝试在我的一个C项目中使用TDD.我对此非常陌生,而且我对编译和使用单元测试的方式有一些非常基本的问题.我在 Linux上使用Boost.Test库. >为所有单元编译包含所有测试套件的单个大型测试程序是否常见?如何将测试分成许多较小的独立测试程序? >如何处理链接(使用make)?每个测试程序对象都必须与源程序中的目标文件链接,该目标文件包含正在测试的内容.有没有办法自动处理?更具体一 我最近开始尝试在我的一个C项目中使用TDD.我对此非常陌生,而且我对编译和使用单元测试的方式有一些非常基本的问题.我在 Linux上使用Boost.Test库.

>为所有单元编译包含所有测试套件的单个大型测试程序是否常见?如何将测试分成许多较小的独立测试程序?
>如何处理链接(使用make)?每个测试程序对象都必须与源程序中的目标文件链接,该目标文件包含正在测试的内容.有没有办法自动处理?更具体一点,是否有编写Makefile以便make自动确定哪些目标文件必须链接在一起以生成某个单元测试程序?

更新:我的代码组织在许多.cpp / .h文件中,目前是单片(没有库).单元测试位于一个单独的目录中,通常与源树中的.cpp文件保持一对一的关系.

更新2:希望这会使我的问题不那么广泛,这里是我正在使用的Makefile的摘录:

$(TSTDIR)%.$(TEST): $(OBjdiR)%.$(TEST).$(OBJEXT) $(OBjdiR)%.$(OBJEXT)    @mkdir -p $(@D)    @$(CXX) -o $@ $^ $(TSTliBS)$(OBjdiR)%.$(OBJEXT): $(SRCDIR)%.$(SRCEXT) $(DEPDIR)%.$(DEPEXT)    @mkdir -p $(@D)    @$(CXX) $(CXXFLAGS) $(INCLUDES) -o $@ $<

$(TEST)只是我用来区分单元测试和其他文件的标记.请注意,我目前正在将所有测试程序与具有相同名称的目标文件链接起来.但是,如果还需要来自另一个目标文件的符号,这将会中断.

更新3:这是我在上一段中讨论的一个例子.

MyOtherClass.h:

class MyOtherClass{public:    int Foo();}

MyOtherClass.cpp:

#include "MyOtherClass.h"int MyOtherClass::Foo(){    return 0;}

MyClass.h:

#include "MyOtherClass.h"class MyClass{public:    int Foo();private:    MyOtherClass moc_;}

MyClass.cpp:

#include "MyClass.h"int MyClass::Foo(){    return moc_.Foo();}

TestMyClass.cpp将测试MyClass :: Foo是否返回0.使用我当前的Makefile,这将无法编译,因为测试程序需要与MyClass.o和MyOtherClass.o链接.

解决方法 我找到了相关问题的 this excellent answer.

通过使用静态或动态库可以解决链接问题.如果正在测试的目标文件被编译到库中,那么当链接单元测试程序时,它将从库中提取它所需的任何依赖项.

总结

以上是内存溢出为你收集整理的c – 如何编译和链接单元测试?全部内容,希望文章能够帮你解决c – 如何编译和链接单元测试?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1227435.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存