У меня есть следующий исходный файл, который имеет класс и структуру.
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());
}