treefrog 之测试

测试

在开发的过程中, 测试是非常重要的.测试需要重复检查, 它是一个烦人的过程.出于这个原因, 自动处理这个过程就变得非常有用了.

模型(model)的单元测试

在这一节总, 我们将尝试检查模型(model)是否工作在正确的方式.测试框架使用了Qt的TestLib(更多详细信息,请查看文档).让我们测试教程中生成的Blog模型(model)的代码.先提前为模型(model)生成一个共享库.首先, 我们在test目录下创建工作目录.

$ cd test
$ mkdir blog
$ cd blog

我们将尝试创建 生成和读取Blog模型的测试用例.
例如, 我们设置实现测试的名字为TestBlog.下面内容的源代码保存在名为testblog.cpp的文件中.

#include <TfTest/TfTest>
#include "models/blog.h"    //  包含模型类
class TestBlog : public QObject
{
    Q_OBJECT
private slots:
    void create_data();
    void create();
};

void TestBlog::create_data()
{
    // 定义测试数据
    QTest::addColumn<QString>("title");
    QTest::addColumn<QString>("body");
    //增加测试数据
    QTest::newRow("No1") << "Hello" << "Hello world.";
}

void TestBlog::create()
{
    // 获取测试数据
    QFETCH(QString, title);
    QFETCH(QString, body);
    //测试的逻辑
    Blog created = Blog::create(title, body);
    int id = created.id();
    Blog blog = Blog::get(id);  // 获取模型 ID
    //检查结果的执行
    QCOMPARE(blog.title(), title);
    QCOMPARE(blog.body(), body);
}

TF_TEST_MAIN( TestBlog)// 指定你创建的类名
#include "testblog.moc"  // 宏. Make .moc扩展

作为补充说明, create()方法可以执行这个测试, QCOMPARE宏可以检查实际返回的值.create_data()方法传递测试数据.规则是在方法名后名添加’_data”.在这个例子, 我在create_data()方法中执行下面的内容.

  • QTest::addColumn() function: 定义名字和测试数据的类型.
  • QTest::newRow() function: 添加测试数据.

下面是在create()方法中执行的.

  • 获取测试数据
  • 执行测试逻辑
  • 检查结果是否正确.

接下来, 创建一个项目文件来生成Makefile.文件名是testblog.pro. 保存下面的内容.

TARGET = testblog
TEMPLATE = app
CONFIG += console debug qtestlib
CONFIG -= app_bundle
QT += network sql
QT -= gui
DEFINES += TF_DLL
INCLUDEPATH += ../..
LIBS += -L../../lib -lmodel
include(../../appbase.pri)
SOURCES = testblog.cpp      # 指定文件名

Qt5以后有些规范已经更改了.如果使用Qt5, 请更改上面的第5行如下.

QT += network sql testlib

在你保存项目文件后, 你可以通过下面的命令在目录生成一个二进制文件.

$ qmake
$ make

接下来, 要执行测试过程,一些配置需要完成.因为需要引用各种配置文件, 测试命令需要一个配置目录的符号连接.它的位置应该直接在测试命令下.当使用SQLite数据库时, 我们也需要生成一个符号连接到db文件夹.

$ ln -s  ../../config  config
$ ln -s  ../../db  db

如果你使用window, 一个测试的exe文件在debug文件夹内生成, 故在那里生成符号连接.请注意: 它不是一个快捷方式.要创建一个符号连接, 必须有管理员权限从命令行窗口运行命令.

> cd debug
> mklink /D  config  ..\..\..\config
> mklink /D  db  ..\..\..\db

还有, 将Blog模型的路径增加到共享库路径.
在Linux中, 设置环境变量如下:

$ export  LD_LIBRARY_PATH=/path/to/blogapp/lib

如果使用Windows, 将设置添加到PATH变量,如下:

> set PATH=C:\path\to\blogapp\lib;%PATH%

然后检查数据库的连接信息.在测试单元中, 在数据库配置文件(database.ini)的test节中的连接信息被使用.

[test]
DriverType=QMYSQL
DatabaseName=blogdb
HostName=
Port=
UserName= root
Password=
ConnectOptions=

配置现在完成了.接下来, 测试需要被执行.如果测试从头到尾都是成功的, 你可以在屏幕上看到下面的信息.

$ ./testblog
********* Start testing of TestBlog *********
Config: Using QTest library 4.8.3, Qt 4.8.3
PASS   : TestBlog::initTestCase()
PASS   : TestBlog::create()
PASS   : TestBlog::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped
********* Finished testing of TestBlog *********

在Windows中, 请在Treefrog命令行串口执行命令.
然而, 如果结果不是期望的那样, 你将会看到如下信息.

********* Start testing of TestBlog *********
Config: Using QTest library 4.8.3, Qt 4.8.3
PASS : TestBlog::initTestCase()
FAIL!: TestBlog:: create( No1) Compared values are not the same
Actual (blog.body()): foo bar.
Expected (body): Hello world.
Loc: [testblog.cpp(33)]
PASS : TestBlog::cleanupTestCase()
Totals: 2 passed, 1 failed, 0 skipped
********* Finished testing of TestBlog *********

为每个模型生成一个测试用例, 然后执行这个测试.一个好的网页应用开发的关键是确保模型(model)正确工作.

### 关于 TreeFrog Framework 插件的使用说明 TreeFrog Framework 是一个基于 C++ 和 Qt 的 MVC 框架,用于构建高性能 Web 应用程序。虽然官方文档和教程主要集中在核心功能上,但在实际开发过程中,插件可以显著提升开发效率并扩展框架的功能。 #### 1. 插件的概念与作用 在 TreeFrog 中,“插件”通常指的是通过第三方库或自定义组件增强应用程序的能力。这些插件可能涉及数据库连接池、缓存机制、身份验证服务或其他中间件集成等功能[^2]。尽管 TreeFrog 自身并未提供专门的“插件管理器”,开发者可以通过引入外部依赖或将常用功能封装成独立模块来实现类似的效果。 #### 2. 常见插件及其用途 以下是几个常见的场景及对应的解决方案: - **局部模板渲染** 如果需要重复使用的 UI 组件(如导航栏、侧边栏等),可以利用 ERB 模板中的 `renderPartial` 方法完成。例如,在视图文件中嵌入名为 `header` 的部分模板: ```erb <%== renderPartial("header") %> ``` 这种方式允许将复杂的界面拆分为多个小型片段,便于维护和重用[^4]。 - **数据库迁移工具** 对于 ORM 支持的数据操作,建议结合 TSqlORMGenerator 自动生成模型类代码。此过程可通过命令行工具简化配置流程: ```bash tspawn model Blog --db mysql://username:password@localhost/mydatabase ``` - **RESTful API 扩展** 若要快速搭建 REST 接口,则可借助 scaffolding 功能生成基本 CRUD 结构。运行如下指令即可创建针对博客系统的资源控制器及相关文件: ```bash tspawn scaffold blog title:string content:text published:boolean ``` #### 3. 安装与配置注意事项 为了顺利部署上述特性,请确认满足以下前提条件[^5]: - 已安装兼容版本的 Qt SDK (推荐 >= 5.7.0); - 配置好支持 C++11 标准的编译环境; - 下载最新版 treefrog 及其关联头文件包。 如果计划接入额外的服务端逻辑(例如 Redis 缓存层或 RabbitMQ 消息队列),则需单独下载对应客户端驱动,并按照具体需求调整项目设置文件 (`application.ini`) 中的相关参数项。 --- ### 示例代码:加载外部静态资源 假设希望从公共 CDN 加载 jQuery 脚本作为辅助功能的一部分,可以在布局模板里加入以下声明语句: ```html <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> ``` 此类做法不仅减少了本地存储负担,还能提高用户体验的一致性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值