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

Importing a header file into a catch c++ unit testing framework

本文关键字:c++ 单元测试 框架 catch 导入 文件      更新时间:2023-10-16

我刚开始使用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时,我得到一个未定义的方法调用,说它不存在,解决这个问题的唯一方法是将整个c++实现复制到测试文件中,这真的不是一个好的做法…我正在使用标准的g++命令编译我的文件,并使用sublime文本编辑器编辑我的文件,所以没有什么特别的包括或绑定文件。
你知道为什么会发生这样的事情吗?怎么解决?

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

例如,将类实现编译为对象文件:

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

现在编译你的测试程序:

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

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

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

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

但项目通常不是这样做的,因为随着项目的增长,它变得不切实际。