我在QT5中使用QT测试,并注意到他们的文档(https://doc.qt.io/qt-5/qttestlib-tutorial1-example.html#writing-a-test(中的示例都没有使用自定义(非QT(命名空间,甚至没有引用QT命名空间。
考虑到这是 c++ 的更好做法,我尝试使用命名空间,但随后测试不起作用。
以下是 QT 文档提供的第一个示例: https://code.qt.io/cgit/qt/qtbase.git/tree/examples/qtestlib/tutorial1/testqstring.cpp?h=5.13
//! [0]
#include <QtTest/QtTest>
class TestQString: public QObject
{
Q_OBJECT
private slots:
void toUpper();
};
//! [0]
//! [1]
void TestQString::toUpper()
{
QString str = "Hello";
QCOMPARE(str.toUpper(), QString("HELLO"));
}
//! [1]
//! [2]
QTEST_MAIN(TestQString)
#include "testqstring.moc"
//! [2]
使用命名空间是我创建了使用 QT 测试时应该做的事情还是不必要的?
不确定我是否理解得很好,也许你在寻找这个?
testqstring.cpp
#include <QtTest>
namespace Test {
class TestQString: public QObject
{
Q_OBJECT
private slots:
void toUpper()
{
QString str = "Hello";
QCOMPARE(str.toUpper(), QString("HELLO"));
}
};
} // end namespace Test
QTEST_APPLESS_MAIN(Test::TestQString)
#include "testqstring.moc"
请注意,宏QTEST_APPLESS_MAIN
展开
#define QTEST_APPLESS_MAIN(TestObject)
int main(int argc, char *argv[])
{
TestObject tc;
QTEST_SET_MAIN_SOURCE_PATH
return QTest::qExec(&tc, argc, argv);
}
所以它必须超出任何命名空间,但由于它不在命名空间中,因此需要以正确的作用域传递类对象,namespace::class