【问题标题】:Importing a header file into a catch c++ unit testing framework将头文件导入 catch c++ 单元测试框架
【发布时间】:2016-10-01 15:18:22
【问题描述】:

我不熟悉使用 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 文本编辑器来编辑我的文件,因此包含或绑定文件没有什么特别的。
知道为什么会发生这种情况以及如何解决吗?

【问题讨论】:

  • 请发布您的测试代码和完整的错误消息。

标签: c++ unit-testing include


【解决方案1】:

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

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

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

现在编译你的测试程序:

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

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

或者,您可以让编译器一次性完成所有编译和链接,只需将所有源文件提供给它:

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

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

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 2016-06-15
    • 2010-09-10
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多