使用命名空间进行 QT 测试

QT Test using namespaces

本文关键字:QT 测试 命名空间      更新时间:2023-10-16

我在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