Нужен ли MockObject - ошибка сегментации GTestC++

Программы на C++. Форум разработчиков
Гость
Нужен ли MockObject - ошибка сегментации GTest

Сообщение Гость »

Тест Google с ошибкой сегментации
Я постоянно обнаруживаю ошибку сегментации каждый раз при компиляции модульного теста Google.
В качестве объяснения я компилирую тест Google без проблем для теста без приспособления.
Однако я должен использовать приспособление (TEST_F) для тестирования макетного объекта модуля с многопоточностью. Поэтому применима ли моя конструкция потока, поскольку, насколько мне известно, я больше не использую nullptr в объявлении?
Заголовок напоминает DummyTest.h

Код: Выделить всё

    #ifndef CSEVCDTEST_DUMMYTEST_H
#define CSEVCDTEST_DUMMYTEST_H

class MockModule : public QObject
{
Q_OBJECT

private:
MockModule(QObject *parent);
~MockModule();
QString ident;

public:
QString getIdent();
void setIdent(const QString &newIdent);
};

MockModule::MockModule(QObject *parent)
{
}

MockModule::~MockModule()
{
delete this;
}

QString MockModule::getIdent() { return ident;}

void MockModule::setIdent(const QString &newIdent) {ident = newIdent;}

class MockThread : public QThread
{
private:
MockThread(MockModule * mockModule);
~MockThread();

void setThread(QThread other);
void run() override;
};

MockThread::MockThread(MockModule *mockModule) : QThread()
{
}

MockThread::~MockThread()
{
}

void MockThread::setThread(QThread other)
{
}

void MockThread::run() override
{
run();
}

class DummyTest : public ::testing::Test {
protected:
QCoreApplication * t_eventLoop;
MockModule t_module;
MockThread t_thread;
void SetUp() override;
void TearDown() override;

public:
};

#endif //CSEVCDTEST_DUMMYTEST_H
Выполнение тестов похоже на DummyTest.cpp

Код: Выделить всё

#include "DummyTest.h"

DummyTest::DummyTest() : ::testing::Test(),
t_eventLoop(),
t_module(&t_eventLoop),
t_thread(&t_module)
{

}

DummyTest::~DummyTest()
{

}

TEST(DummyTest, WillNotSegFault)
{
ASSERT_EQ(2,3);
}

TEST_F(DummyTest, WillSegFault)
{
ASSERT_EQ(2,3);
}

int main(int &argc, char * argv)
{
::testing::InitGoogleTest();
return RUN_ALL_TESTS();

}
Код не требует определений с тестированием приспособлений::NiceMock
Результаты рабочего теста приведены ниже
Запуск функции main() из /home/.../DummyTest

Код: Выделить всё

[==========] Running 2 tests from 1 test suite
[----------] Global test environment set-up
2 tests from DummyTest
[ RUN      ] DummyTest.WillNotSegFault
[       OK ] DummyTest.WillNotSegFault (0 ms)
[ RUN      ] DummyTest.WillSegFault
Napaka segmentacije (izpis jedra)
где сообщение об ошибке переводится: ошибка сегментации (основной поток)
Аналогичная реализация с тестированием приспособлений::NiceMock может скомпилироваться но я не вижу в этом возможности. Или это необходимо (фиксация дочерних объектов??

Подробнее здесь: https://stackoverflow.com/questions/787 ... tion-fault

Вернуться в «C++»