将头文件导入catch c ++单元测试框架

时间:2016-10-01 15:18:22

标签: c++ unit-testing include

我是使用Catch c ++单元测试框架的新手 我试图测试我已经建成的课程,比方说我有两个文件, cow.cpp文件和cow.h文件:
cow.h

    class Cow{
      public:
         Cow(std::string name);
         void moo(std::string someWords);
      private:
         std::string name;
    };

cow.cpp

    Cow::Cow(std::string cowName){
        name = cowName;
    }

    void Cow::moo(std::string someWords){
        std::cout  << "my name is " << name <<" mooo " << someWords <<"\n";
    }

现在我想为该类编写测试,因此我创建了一个测试文件testCow.cpp并包含catch.h c ++单头文件和cow.h标题,
但是现在当我尝试调用方法moo时,我得到一个未定义的方法调用,说它不存在,解决这个问题的唯一方法是将整个s ++实现复制到测试文件中,这实际上并非如此一个好的做法...
我正在使用标准的g++命令编译我的文件,并使用sublime文本编辑器来编辑我的文件,因此没有什么特别的包含或绑定文件。
知道为什么会发生这样的事情以及如何解决它?

1 个答案:

答案 0 :(得分:0)

您需要链接到您的类的实现对象文件。

例如,将类实现编译为目标文件:

g++ -c -o cow.o cow.cpp

现在编译测试程序:

g++ -o testCow testCow.cpp cow.o

构建程序时,需要链接程序使用的所有目标文件。

或者你可以通过给它所有的源文件让编译器一次完成所有的编译和链接:

g++ -o testCow testCow.cpp cow.cpp 

但这不是项目通常如何做到的,因为随着项目的发展它变得不切实际。