Я пытаюсь сравнить QVariable QSignalSpy с Enum в тестовой функции. Я нашел Q_ENUM_NS
, но получил ошибку компоновщика. Я восстановил его и запустил qmake.
Сообщение об ошибке: Undefined reference to CCS::staticMetaObject
testopcua. cpp (большинство частей)
Q_DECLARE_METATYPE(CCS::DataManagerState)
using namespace ::testing;
class TestOpcUa : public Test
{
public:
TestOpcUa()
{
//.....
}
~TestOpcUa()
{
delete _selectedConfValid;
delete _opcUaObjectValid;
}
protected:
MockOpcConf* _selectedConfValid = nullptr;
OpcUa* _opcUaObjectValid = nullptr;
};
TEST_F(TestOpcUa, checkHandshake)
{
qRegisterMetaType<CCS::DataManagerState>("state");
QSignalSpy readySpy(_opcUaObjectValid, SIGNAL(newManagerState(CCS::DataManagerState)));
_opcUaObjectValid->connect();
readySpy.wait();
ASSERT_EQ(readySpy.count(), 1);
ASSERT_EQ(readySpy.at(0).at(0).value<CCS::DataManagerState>(), CCS::DataManagerState::Ready); //Linker error
}
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
testing::InitGoogleTest(&argc, argv);
testing::InitGoogleMock(&argc, argv);
return RUN_ALL_TESTS();
}
enums.h DLL
#include <QObject>
namespace CCS
{
Q_NAMESPACE
enum class DataManagerState
{None, Configure, Ready, Active, Waiting, Stop};
Q_ENUM_NS(DataManagerState)
}