我运行gtest时出现错误,对此一无所知

时间:2019-01-24 12:51:34

标签: c++ visual-studio googletest googlemock

我遇到了MockInterfaceTest.MockTest问题 未知文件:错误:C ++异常,描述为“     模拟函数没有设置默认操作,返回类型也没有设置默认值。”测试主体中抛出了任何人。有人可以解释为什么会出现这种情况吗?我用Google搜索了一下,但没有找到任何东西。

#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();
}

1 个答案:

答案 0 :(得分:0)

您没有提供要嘲笑的功能的签名(头文件PropertyInterfaceSYSTEM_INFO的类型定义将非常有用)。

仍然,仅从错误消息和MOCK声明的形式开始,我猜测,对于gtest,SYSTEM_INFO类型没有可用的默认构造函数。

由于您没有指定调用MOCK(以及其他任何模拟函数)时getHardwareValue()究竟应返回什么,它会尝试返回默认的构造值(作为后备),但是由于没有办法创建“默认” SYSTEM_INFO,它会在万不得已时抛出异常。