从CXX测试中访问C++函数
问题描述:
我正在为我写的一个类写几个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
任何帮助将不胜感激。
答
在第一种情况下,您尝试调用没有Test实例的成员函数。您需要一个测试才能打开它,就像您在第二种情况下所做的那样。
在第二种情况下,当您尝试使用具有指向对象的指针的语法来调用成员时,' - >',当您实际上有一个对象时。您希望第二个看起来像这样:
test->GenerateHash(...)
如果你以某种方式进行了测试*,那么你可以这样调用它
test->GenerateHash(...)
使用点的对象,箭对象指针。
更多的代码和错误输出将会有所帮助。
答
如果GenerateHash函数可以是一个static
方法,则将其设为静态。然后用它来调用Test::GenerateHash(/*your arguments*/);
考虑到你最初试图调用GenerateHash
的方式,我猜测这应该是一个静态方法。如果它的执行不依赖于Test
类的特定实例,那么它可以是静态的。
否则,使用test.GenerateHash
而不是
你实例测试对象?请提供更多代码。 –
你如何试图访问它?它怎么不工作?你会得到什么错误? – sth