C++ 我在运行gtest时出错,对此我一无所知

C++ 我在运行gtest时出错,对此我一无所知,c++,visual-studio,googletest,googlemock,C++,Visual Studio,Googletest,Googlemock,我收到了MockInterfaceTest的问题 未知文件:错误:C++异常与描述 mock函数没有默认操作集,其返回类型没有默认值集。扔进测试身体。有人能解释为什么会这样吗?我在谷歌上搜索了一下,但什么也没找到 #include "pch.h" #include "gtest/gtest.h" #include "gmock/gmock.h" #include "../../StaticLib1/StaticLib1/SysProps.h" class MockTest : public

我收到了MockInterfaceTest的问题 未知文件:错误:C++异常与描述 mock函数没有默认操作集,其返回类型没有默认值集。扔进测试身体。有人能解释为什么会这样吗?我在谷歌上搜索了一下,但什么也没找到

#include "pch.h"
#include "gtest/gtest.h"
#include "gmock/gmock.h"
#include "../../StaticLib1/StaticLib1/SysProps.h"


class MockTest : public PropertyInterface
{
public:
    MOCK_METHOD0(getComputerName, TCHAR*());
    MOCK_METHOD0(getSysDirectory, TCHAR*());
    MOCK_METHOD0(getUserName, TCHAR*());
    MOCK_METHOD0(getWindowsDir, TCHAR*());
    MOCK_METHOD0(getHardwareValue, SYSTEM_INFO());
};
using ::testing::_;
TEST(MockInterfaceTest, MockTest)
{
    MockTest mt;
    EXPECT_CALL(mt, getComputerName()).Times(1);
    EXPECT_CALL(mt, getSysDirectory()).Times(1);
    EXPECT_CALL(mt, getUserName()).Times(1);
    EXPECT_CALL(mt, getWindowsDir()).Times(1);
    EXPECT_CALL(mt, getHardwareValue()).Times(1);
    mt.getComputerName();
    mt.getSysDirectory();
    mt.getUserName();
    mt.getWindowsDir();
    mt.getHardwareValue();
}
int main(int argc, char** argv) {
    ::testing::InitGoogleMock(&argc, argv);
    return RUN_ALL_TESTS();
}

您没有提供模拟头文件属性接口的函数的签名,SYSTEM_INFO的类型定义将非常有用

尽管如此,仅从错误消息和MOCK声明的形式来看,我猜想对于gtest,SYSTEM_INFO类型没有可用的默认构造函数


由于您没有指定调用getHardwareValue或任何其他模拟函数时模拟应返回的确切内容,它试图返回一个默认构造值作为回退,但由于无法创建默认系统信息,因此它会抛出一个异常作为最后手段。

该错误意味着您在EXPECT\u调用时没有指定返回值,并且GMock不知道默认返回什么。我想它不知道如何构造默认的SYSTEM_INFO,或者它不知道应该这样做,但我从未使用过WinApi,对此我不确定。无论如何,您可以使用设置mock要执行的默认操作。这可能会解决问题。您可以尝试为SYSTEM_INFO:设置默认值:testing::DefaultValue::SetSYSTEM_INFO;