2

我在 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 测试时应该做的事情还是不必要的?

4

1 回答 1

1

不知道我是否理解得很好,也许你在找这个?

测试字符串.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

于 2019-08-29T14:02:43.513 回答