QAbstractItemModelTester Class

QAbstractItemModelTester 类可帮助测试QAbstractItemModel 子类。更多

Header: #include <QAbstractItemModelTester>
CMake: find_package(Qt6 REQUIRED COMPONENTS Test)
target_link_libraries(mytarget PRIVATE Qt6::Test)
qmake: QT += testlib
继承: QObject

公共类型

enum class FailureReportingMode { QtTest, Warning, Fatal }

公共函数

QAbstractItemModelTester(QAbstractItemModel *model, QObject *parent = nullptr)
QAbstractItemModelTester(QAbstractItemModel *model, QAbstractItemModelTester::FailureReportingMode mode, QObject *parent = nullptr)
QAbstractItemModelTester::FailureReportingMode failureReportingMode() const
QAbstractItemModel *model() const
(since 6.4) void setUseFetchMore(bool value)

详细说明

QAbstractItemModelTester 类是一个测试项模型的实用类。

在实现项目模型(即具体的QAbstractItemModel 子类)时,必须遵守一系列非常严格的规则,以确保模型用户(视图、代理模型等)的一致性。

例如,对于给定的索引,模型对hasChildren() 的重新实现必须与rowCount() 和columnCount() 返回的值一致。

QAbstractItemModelTester 可帮助捕捉自定义项模型类中最常见的错误。通过执行一系列测试,它将尝试检查模型状态是否始终一致。每次修改模型时,测试都会自动重复。

QAbstractItemModelTester 采用非破坏性测试,通常包括从给定的项目模型中读取数据和元数据。QAbstractItemModelTester 还会尝试对模型进行非法修改。在正确实现的模型中,此类尝试应被拒绝,数据也不会因此而改变。

使用方法

使用 QAbstractItemModelTester 非常简单。在测试用例中,只需创建一个实例,将需要测试的模型传递给构造函数即可:

MyModel *modelToBeTested = ...;
auto tester = new QAbstractItemModelTester(modelToBeTested);

QAbstractItemModelTester 将通过Qt Test 日志机制报告测试失败。

也可以在测试用例之外使用 QAbstractItemModelTester。例如,测试应用程序使用的项目模型可能很有用,而不需要为这样的模型建立明确的单元测试(这可能很有难度)。要在测试用例之外使用 QAbstractItemModelTester,可将QAbstractItemModelTester::FailureReportingMode 枚举器之一传递给它的构造函数,从而指定如何记录失败。

QAbstractItemModelTester 还可以在qt.modeltest 日志类别下以日志信息的形式报告额外的调试信息。此类调试记录默认是禁用的;请参阅QLoggingCategory 文档了解如何启用它。

注意: 虽然 QAbstractItemModelTester 能有效帮助开发和测试自定义项模型,但它不能(也无法)捕捉QAbstractItemModel 子类中所有可能存在的问题。值得注意的是,它永远不会对模型进行有意义的破坏性测试,因此必须对模型进行单独测试。

另请参阅 模型/视图编程QAbstractItemModel

成员类型文档

enum class QAbstractItemModelTester::FailureReportingMode

该枚举指定QAbstractItemModelTester 在测试QAbstractItemModel 子类时应如何报告失败。

常量说明
QAbstractItemModelTester::FailureReportingMode::QtTest0失败将作为QtTest 测试失败报告。
QAbstractItemModelTester::FailureReportingMode::Warning1失败将作为qt.modeltest 日志类别中的警告信息报告。
QAbstractItemModelTester::FailureReportingMode::Fatal2失败会导致程序立即异常终止。故障原因将通过qFatal() 报告。

成员函数文档

QAbstractItemModelTester::QAbstractItemModelTester(QAbstractItemModel *model, QObject *parent = nullptr)

使用给定的parent 创建模型测试器实例,该实例将测试模型model

故障报告模式设置为FailureReportingMode::QtTest

QAbstractItemModelTester::QAbstractItemModelTester(QAbstractItemModel *model, QAbstractItemModelTester::FailureReportingMode mode, QObject *parent = nullptr)

使用给定的parent 创建模型测试器实例,该实例将测试模型model ,并使用指定的mode 报告测试失败。

另请参阅 QAbstractItemModelTester::FailureReportingMode

QAbstractItemModelTester::FailureReportingMode QAbstractItemModelTester::failureReportingMode() const

返回该实例化用于报告测试失败的模式。

另请参阅 QAbstractItemModelTester::FailureReportingMode

QAbstractItemModel *QAbstractItemModelTester::model() const

返回此实例正在测试的模型。

[since 6.4] void QAbstractItemModelTester::setUseFetchMore(bool value)

如果value 为 "true",则默认启用被测模型的动态种群。如果value 为 false,则会禁用。

此函数在 Qt 6.4 中引入。

另请参阅 QAbstractItemModel::fetchMore()。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.