0

CLIでのGoogleテストはまったく初めてです。google test をセットアップして Visual Studio 2012 と統合することができました。ただし、プロジェクトのヘッダー ファイルを tester.h ファイルに含めようとすると (ヘッダー ファイルの関数をテストしたいため)、次のような問題が発生しました。エラー:

Error   2   error LNK2028: unresolved token (0A0006FB) "public: __thiscall ExpenseTracker::ExpenseTracker(void)" (??0ExpenseTracker@@$$FQAE@XZ) referenced in function "private: virtual void __thiscall enter_settings_user_login_Test::TestBody(void)" (?TestBody@enter_settings_user_login_Test@@$$FEAEXXZ)  C:\Users\Jacky\Desktop\EzXpns3\test_project\main.obj    test_project
Error   3   error LNK2019: unresolved external symbol "public: __thiscall ExpenseTracker::ExpenseTracker(void)" (??0ExpenseTracker@@$$FQAE@XZ) referenced in function "private: virtual void __thiscall enter_settings_user_login_Test::TestBody(void)" (?TestBody@enter_settings_user_login_Test@@$$FEAEXXZ)   C:\Users\Jia Wei\Desktop\EzXpns3\test_project\main.obj  test_project

依存関係を含めてみました gtestd.lib、kernel32.lib、user32.lib、advapi32.lib、Ws2_32.lib

問題はわずかに解決しました。expenseTracker.h と ExpenseTracker.cpp を使用する代わりに、ExpenseTracker.h のすべての実装をヘッダー ファイル自体に配置し、すべてを適切にコンパイルしてテストを実行しました。ただし、プロジェクト全体がヘッダー ファイルと cpp ファイルの両方で構築されているため、テスト目的ですべてをやり直すのは賢明ではありません。誰でもこれを手伝ってもらえますか?

以下に私のヘッダーファイルを添付します。

//tester.h

#include "gtest/gtest.h" //include to use Google Unit test's stuff
#include "C:\Users\Jacky\Desktop\EzXpns3\Source - testing\EzXpns2\ExpenseTracker.h"

using namespace std;

class ExpenseTracker;
/************************************************************************/

/* We write test cases here */

/************************************************************************/

TEST(basic_test, add_simple_route)
{
    ASSERT_EQ(1, 1);
}

TEST(enter_settings, user_login)
{
    ExpenseTracker :: ExpenseTracker();
    //loadUserInfo();
    string username = "XXX_XXX";
    string password = "12345";
    //myTracker -> loadUserInfo();
    //bool result = myTracker -> login(username, password);
    //ASSERT_EQ(true, result);
}

void runTest(int argument_count, char** argument_vars)
{
    testing::InitGoogleTest(&argument_count, argument_vars); //initialize GTest
    RUN_ALL_TESTS();
    std::getchar(); //pause the program after all the testing
}

//main.cpp

#include "tester.h"
#include <cstdio>


using namespace System;
using namespace testing;

int main(int argument_count, char** argument_vars)
{
    //int argc;
    //char** argv;
    //runTest(argc, argv);
    //InitGoogleTest(argc, argv);   

    testing::InitGoogleTest(&argument_count, argument_vars); //initialize GTest
    RUN_ALL_TESTS();
    std::getchar();


    return 0;
}

//ExpenseTracker.h、含めたいファイル

#ifndef _EXPENSETRACKER_H
#define _EXPENSETRACKER_H

#include <string>
#include <vector>
#include "user2.h"

using namespace std;

class ExpenseTracker
{
private:
    vector<User*> allMyUsers;

public:
    ExpenseTracker(); //empty constructor
    void addUser(User*);
    int findUser(string);
    bool login(string, string);
    void loadUserInfo();
    User* getUser(string);
    int getUserSize();
};

#endif;
4

1 に答える 1

-1

コンストラクターの実装を提供する必要があります。つまり、次のように変更する必要があります。

 ExpenseTracker(); //empty constructor

の中へ:

ExpenseTracker() {} // empty constructor

ただし、コンストラクターは空であるため、完全に削除することもできます。

于 2013-03-15T10:26:54.857 に答える