Я постоянно обнаруживаю ошибку сегментации каждый раз при компиляции модульного теста 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
Код: Выделить всё
#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();
}
Результаты рабочего теста приведены ниже
Запуск функции 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