Приспособление 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;
};