在构造函数中带有参数的blitz++类的GoogleTest Fixture
GoogleTest Fixture for blitz++ class with arguments in constructor
我有一个与此相关的问题:当构造函数获取参数时,GTest fixture?。我想知道,当被测试的类为构造函数取一个参数时,如何设置GTest fixture。我试图复制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
即M1似乎没有分配?或者它超出了范围?
就在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
。
相关文章:
- 具有默认模板参数的多态类的模板推导失败
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- std::具有相同基类的类的变体
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 无法访问嵌套类.类的使用无效
- 如何返回一个类的两个对象相加的结果
- C++中带有List类的迭代器Segfault
- 无法创建抽象类的实例
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 通过指向指针数组的指针访问子类的属性
- 如何比较自定义类的std::变体
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 如何引用基类的派生类?
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 类的C++属性似乎已重新初始化
- 为什么指针不写入类的地址?
- 如何将lambda作为模板类的成员函数参数
- 在构造函数中带有参数的blitz++类的GoogleTest Fixture