2011-08-24 142 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而不是​​