我最近尝试为包含Q_OBJECT宏和自定义信号的类编写单元测试(使用googletest)。测试子项目将不会编译(即使在重建/删除所有内容之后),并出现以下链接器错误:
"error: undefined reference to `vtable for Class'"
和
"error: undefined reference to `vtable for Class::signal()'"
我的src子项目编译得很好。在研究了这个问题后,我想问题是编译器没有为测试子项目生成moc文件。另外,我还没有成功在测试中包含src子项目的moc文件。我该如何解决这个问题?
以下是我的.pro文件:
Project .pro文件
TEMPLATE = subdirs
CONFIG(debug, debug|release) {
SUBDIRS += \
src \
test
test.depends = src
} else {
SUBDIRS += \
src
QMAKE_CXXFLAGS += -O2
}
src.pro
QT += core gui charts widgets
TARGET = Project name
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000
HEADERS += \
...
SOURCES += \
...
test.pro
include(gtest_dependency.pri)
QT += core
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG += thread
CONFIG += qt
INCLUDEPATH += $$PWD/../src
DEPENDPATH += $$PWD/../src
HEADERS += \
... (only test headers)
SOURCES += \
... (test and src source files)
答案 0 :(得分:1)
我遇到了同样的问题。确保Qt mocs src头也适用于测试项目似乎需要在测试项目.pro文件中提及它们。因此添加如下内容:
ActiveRecord::RecordInvalid in CoursesController#create
Validation failed: Listing must exist
如果测试需要所有src标头,则可以将它们提取到一个公共的.pri文件中。