Я получил ошибку при запуске моего теста, и я ничего не знаю об этом - PullRequest
0 голосов
/ 24 января 2019

У меня возникла проблема MockInterfaceTest.MockTest неизвестный файл: ошибка: исключение 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();
}

1 Ответ

0 голосов
/ 28 января 2019

Вы не предоставили сигнатуру надсматриваемых функций (заголовочный файл PropertyInterface и определение типа для SYSTEM_INFO были бы очень полезными).

Тем не менее, из сообщения об ошибке и формы только объявления MOCK я догадываюсь , что (для gtest) нет используемого конструктора по умолчанию для типа SYSTEM_INFO.

Поскольку вы не указали, что именно должен возвращать MOCK при вызове getHardwareValue() (ни какой-либо другой из проверяемых функций), он пытается вернуть построенное значение по умолчанию (как запасной вариант), но так как нет никакого способа для создания «по умолчанию» SYSTEM_INFO в качестве крайней меры он создает исключение.

...