在使用QTest
创建测试时,我目前正在使用以下模式。
_data
方法。_data
方法都会指定要使用的设置和数据,并为案例命名。这最后一点让我感到困扰,因为我不仅仅传递数据,还传递用于初始化特定测试的数据。有时它看起来很奇怪,即使我的测试很短,但由于初始化逻辑,它们并不是那么直观。
我所知道的替代模式是根据初始化需求拆分每个测试方法(违反我的规则#3)。一方面它会消除很多_data
测试方法,但它也会使测试类更大,不再容易与生产类相关(命名虽然有帮助)。大多数谷歌测试都是这样写的。
另一种选择是使用对象的全局状态,就像我对待全局设置一样。如果对象有效或无效,则它不会是每个_data
方法的一部分,而是设置将在任一配置中运行的测试类。
我主要担心的是可维护性。根据我目前的方法,我有时很难理解我传递给测试的设置的细微差别,我需要一些合理的方法将它们分开,而不是让它自己负担得更多。
答案 0 :(得分:1)
对于全局设置,您多次运行测试类,因此IMHO对本地设置执行相同操作并不会“违反”您的规则#3,它更像是规则#2的扩展。
或者,您可以将初始化例程作为测试数据的一部分。
像
这样的东西private slots:
void someMethodTest_data()
{
QTest::addColumn<QByteArray>("settings");
//....
QTest::addRow("case1") << "settings1" << ....
}
void someMethodTest()
{
Q_FETCH(QByteArray, settings);
const QByteArray initMethod = QTest::currentTestFuntion() + "_init_" + settings;
QMetaObject::invokeMethod(this, initMethod.constData(), Qt::DirectConnect);
// commence test
}
protected slots:
void someMethodTest_init_settings1();