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)正確工作.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章