2011-08-24 148 views
0

我正在为我写的一个类写几个CXX单元测试。我从未写过CXX测试(也是我可以使用的唯一框架)。我试图调用我的类中包含的函数,以便我可以测试输出是预期的结果,但我不确定是否可以执行此操作,如果可以,请执行此操作。从CXX测试中访问C++函数

Test.h: 
class Test..... { 
    public: 
     std::string GenerateHash(const std::string& user, const std::string& url) const; 
    ... 
} 


Test.cpp: 
string 
Test::GenerateHash(const string& user, const string& urrl) const { 
    ... 
} 

我在CXX测试中包含了头文件,但无法访问GenerateHash函数。

Test.cxx_h: 
void testCheckHashGeneration(void) { 
    TS_ASSERT_EQUALS (GenerateHash("testuser", "http://www.stackoverflow.com"), "DFEGEC....."); 
} 

Error: error: âGenerateHashâ was not declared in this scope 

我也试过:

Test.cxx_h: 
void testCheckHashGeneration(void) { 
    Test test; 
    TS_ASSERT_EQUALS (test->GenerateHash("testuser", "http://www.stackoverflow.com"), "DFEGEC....."); 
} 

Error: error: âTestâ has not been declared 

任何帮助将不胜感激。

+0

你实例测试对象?请提供更多代码。 –

+0

你如何试图访问它?它怎么不工作?你会得到什么错误? – sth

回答

0

在第一种情况下,您尝试调用没有Test实例的成员函数。您需要一个测试才能打开它,就像您在第二种情况下所做的那样。

在第二种情况下,当您尝试使用具有指向对象的指针的语法来调用成员时,' - >',当您实际上有一个对象时。您希望第二个看起来像这样:

test->GenerateHash(...) 

如果你以某种方式进行了测试*,那么你可以这样调用它

test->GenerateHash(...) 

使用点的对象,箭对象指针。

更多的代码和错误输出将会有所帮助。

0

如果GenerateHash函数可以是一个static方法,则将其设为静态。然后用它来调用Test::GenerateHash(/*your arguments*/);

考虑到你最初试图调用GenerateHash的方式,我猜测这应该是一个静态方法。如果它的执行不依赖于Test类的特定实例,那么它可以是静态的。

否则,使用test.GenerateHash而不是​​