Определение функции для "MOCK_METHOD0" не найдено при использовании gmock с C ++ - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть следующий исходный файл, который имеет класс и структуру.

windowsdata.h

struct windows_data
    {
        std::wstring computer_model;
        std::wstring computer_name;
        std::wstring computer_manufacturer;
    };
class windows_interface
    {
    public:
        virtual void read_windows_data() = 0;
        virtual ~windows_interface();
    };

std::wstring get_wmi_interface();

Чтобы использовать gtest и gmock, я следовал следующий подход:

test_all_modules. cpp

#include "stdafx.h"
#include <Windows.h>

#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include "test_all_modules.h"

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    ::testing::InitGoogleMock(&argc, argv);
    int result = RUN_ALL_TESTS();
    getchar();
    return result;
}

test_all_modules.h

#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include <string>
#include <system_error>

using namespace ::testing;

class test_windows_data : public ::testing::Test
{
protected:
    test_windows_data() {};
    ~test_windows_data() {};
    void SetUp() override {};
};

В приведенном ниже файле я использую gtest для вызова исходной функции и проверки структурных переменных. Это правильный способ проверки структурных переменных с помощью gtest?

А также я использую gmock, создавая фиктивный класс.

Но когда я использую MOCK_METHOD0, это показывает определение функции для "MOCK_METHOD0" не найдено. Нужно ли определять «MOCK_METHOD0»? Если да, пожалуйста, помогите мне, как определить?

Может кто-нибудь, пожалуйста, помогите мне, как решить? Я использую gtest и gmock версии 1.8.1. И правильно указывает на правильную библиотеку и включаемые файлы.

test_windows_data. cpp

#include "stdafx.h"
#include "test_all_modules.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"

using namespace MyTest;
    TEST_F(test_windows_data, test_windows_data_default) 
    {
        windows_data windows_data_obj;  // original structure
        std::wstring ptr_windows_interface = get_windows_interface();
        windows_data_obj = ptr_windows_interface->read_windows_data();

        EXPECT_GT( windows_data_obj->computer_name.length(), 0);
        EXPECT_GT( windows_data_obj->computer_manufacturer.length(), 0);
        EXPECT_GT( windows_data_obj->computer_model.length(), 0); 
    }

    class mock_windows_interface : public windows_interface {
    public:
        MOCK_METHOD0(read_windows_data, void());
    };
    mock_windows_interface mock_windows;
    TEST(mock_windows, test_windows_data_default) {

    EXPECT_CALL(mock_windows, read_windows_data());
    }
...