首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构造函数中带有参数的GoogleTest类的blitz++夹具

构造函数中带有参数的GoogleTest类的blitz++夹具
EN

Stack Overflow用户
提问于 2013-12-11 10:52:45
回答 1查看 240关注 0票数 0

我有一个与这个相关的问题:GTest fixture when constructor takes parameters?。我想知道,当测试类接受构造函数参数时,如何设置GTest夹具。我试图复制blitz++的答案,而不是arma,但我失败了。有什么线索吗?

考试班:

代码语言:javascript
复制
#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_;
}

测试:

代码语言:javascript
复制
#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();
}

最后的测试失败了

代码语言:javascript
复制
TClassTest.cpp:43: Failure
Value of: (*M.at(0)).extent(1)
Actual: 32767
Expected: 3

也就是说,似乎没有分配M1?还是它超出了范围?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-11 11:46:17

就在SetUp完成之前,它已经超出了范围。你可能想:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20517174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档