GoogleTest Fixture для класса blitz ++ с аргументами в конструкторе

У меня есть вопрос, который связан с этим: Приспособление GTest, когда конструктор принимает параметры?. В этом вопросе я хотел знать, как настроить прибор GTest, когда тестируемый класс принимает параметр для конструктора. Я попытался повторить ответ для blitz ++ вместо arma, и мне это не удалось.
Есть какие-нибудь подсказки?

Тестовый класс:

#include <blitz/array.h>
#include <vector>

class TClass {
private:
std::vector<blitz::Array<double,2> * > mats;
public:
TClass(std::vector<blitz::Array<double,2> * > m_);
blitz::Array<double,2> * GetM( int which ){ return( mats.at(which) );};

};

TClass::TClass(std::vector<blitz::Array<double,2> * > m_){
mats = m_;
}

Тест:

#include <gtest/gtest.h> // Include the google test framework
#include "TClass.cpp"

class TClassTest : public ::testing::Test {
protected:
int n;
int m;
std::vector<blitz::Array<double,2> * > M;
virtual void SetUp() {
n = 3;
m = 2;
blitz::Array<double,2> M1(n,m);
blitz::Array<double,2> M2(n,m);
M.push_back( &M1);
M.push_back( &M2);
T = new TClass(M);
}

virtual void TearDown() {delete T;}

TClass  *T;
};TEST_F(TClassTest, CanGetM1){
EXPECT_EQ( T->GetM(0), M.at(0) );
}

TEST_F(TClassTest, CanSeeN){
EXPECT_EQ( 3, n );
}

TEST_F(TClassTest, CanSeeM){
EXPECT_EQ( 3, (*M.at(0)).extent(blitz::firstDim) );
}

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

Финальный тест не пройден с

TClassTest.cpp:43: Failure
Value of: (*M.at(0)).extent(1)
Actual: 32767
Expected: 3

то есть кажется, что М1 не выделен? Или это вышло за рамки?

0

Решение

Он вышел за рамки незадолго до завершения SetUp. Вы, вероятно, хотите:

class TClassTest : public ::testing::Test
{
protected:
int n;
int m;
std::vector<blitz::Array<double,2> * > M;
virtual void SetUp() {
n = 3;
m = 2;
M.push_back( new blitz::Array<double,2>(n,m) );
M.push_back( new blitz::Array<double,2>(n,m) );
T = new TClass(M);
}
virtual void TearDown()
{
delete T;
delete M[0];
delete M[1];
}
TClass  *T;
};

Другое дело, что вы не должны включать файлы cpp. Переименуйте их в .h или же .hpp,

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector