0

私が書いたクラスのCXXユニットテストをいくつか書いています。私はこれまでCXXテストを書いたことがありません(これも私が使用できる唯一のフレームワークです)。クラス内に含まれている関数を呼び出して、出力が期待どおりであることをテストできるようにしようとしていますが、これを実行できるかどうか、実行できる場合はどのように実行できるかわかりません。

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 

どんな助けでも大歓迎です。

4

2 に答える 2

0

GenerateHash 関数をstaticメソッドにすることができる場合は、静的にします。次に、を使用して呼び出しますTest::GenerateHash(/*your arguments*/);

最初に を呼び出そうとした方法を考えるとGenerateHash、これは静的メソッドである必要があると思います。その実行がクラスの特定のインスタンスに依存しない場合は、Test静的にすることができます。

それ以外の場合test.GenerateHashは、test->GenerateHash

于 2011-08-24T14:26:08.543 に答える
0

最初のケースでは、のインスタンスなしでメンバー関数を呼び出そうとしていますTestTest2 番目のケースで行ったように、それを呼び出すにはが必要です。

->2 番目のケースでは、オブジェクトを実際に持っているときに、オブジェクトへのポインタ ' ' を持つための構文を使用してメンバーを呼び出そうとしています。2番目を次のようにします。

test.GenerateHash(...)

どういうわけか Test* がある場合、次のように呼び出すことができます

test->GenerateHash(...)

.オブジェクト、オブジェクト->へのポインターに使用します。

より多くのコードとエラー出力が役立ちます。

于 2011-08-24T14:21:36.543 に答える