Приспособление GTest, когда конструктор принимает параметры?

У меня есть простой пример класса. Он имеет один элемент данных, который является std::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 для тестирования функции-члена 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 в определении прибора?

1 ответ

Решение

Объект 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;
};
Другие вопросы по тегам