c++ - 构造函数采用参数时的GTest夹具?

标签 c++ googletest armadillo

我有一个简单的示例类。它有一个数据成员,它是一个指向 Armadillo 矩阵的指针的 std::vector。构造函数将这样一个 vector 作为唯一的参数。这是文件 TClass.cpp:

#include <armadillo>
#include <vector>

class TClass {
    private: 
        std::vector<arma::mat * > mats;
    public:
        TClass(std::vector<arma::mat * > m_);
        arma::mat * GetM( int which ){ return( mats.at(which) );};

};

TClass::TClass(std::vector<arma::mat * > m_){
    mats = m_;
}

我想构造一个 GTest fixture 来测试成员函数 GetM。这是我所做的:

#include <gtest/gtest.h> 
#include "TClass.cpp"


class TClassTest : public ::testing::Test {
 protected:
    int n;
    int m;
    std::vector<arma::mat * > M;

  virtual void SetUp() {
      n = 3;
      m = 2;
      arma::mat M1 =  arma::randu<arma::mat>(n,m);
      arma::mat M2 =  arma::randu<arma::mat>(n,m);
      M.push_back( &M1);
      M.push_back( &M2);
  }

  // virtual void TearDown() {}

  // initiate a TClass object
  TClass T(M);
};

// my test
TEST_F(TClassTest, CanGetM1){

    EXPECT_EQ( T.GetM(0), M.at(0) );

}

int main(int argc, char **argv) { 
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

我用 g++ TClassTest.cpp -o tclass -larmadillo 编译它。它告诉我 TClassTest.cpp:24: error: ‘M’ is not a type。我不明白为什么我不能在夹具定义中构造 TClass 对象?

最佳答案

对象 T 不能在类 TClassTest 的声明中初始化。你最近一直在写 Java 吗? ;-)

要初始化它,你可以这样做:

class TClassTest : public ::testing::Test {
  // ... (rest of code is fine as is)
  virtual void SetUp() {
    // ...
    T = new TClass(M);
  }

  virtual void TearDown() { delete T; }

  TClass *T;
};

关于c++ - 构造函数采用参数时的GTest夹具?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20497095/

相关文章:

c++ - 为什么 std::hash 是结构而不是函数?

c++ - 变量地址的运算符[]如何工作?

c++ - 定义整数之间的特殊除法

c++ - 测试 C++ 代码 : Using test libraries

c++ - 无法创建模拟类/对象来替换类中私有(private)成员对象的功能,以便在 gtest 中进行单元测试

matrix - 如何在 Armadillo 中加入矩阵

c++ - 将 cx_vec 元素转换为双复杂 Armadillo C++

parallel-processing - Rcpp 导致段错误 RcppArmadillo 不会

c++ - 如何获取类中方法的地址?

unit-testing - 使用 CMake 在 CLion 中使用多个 Main 进行 Google 单元测试