[QTestLib] QTestLibを使ってみる

テストコードなんて書いたことないので書いてみようかなと思ったけど、わざわざテストフレームワークインストールするのもメンドクサイので、Qt標準ライブラリのQTestLibをヘルプを見ながら使ってみた。

0. テスト対象の準備

テスト対象として、次のようなSampleClassクラスを準備した。

sampleclass.h
#ifndef SAMPLECLASS_H
#define SAMPLECLASS_H

class SampleClass
{
public:
    SampleClass();
    SampleClass( const double data );
    SampleClass( const SampleClass& rhs );
    virtual ~SampleClass();

public:
    SampleClass operator = ( const SampleClass& rhs );

public:
    bool isPositive() const;
    double data() const;

private:
    double m_data;
};

#endif // SAMPLECLASS_H
sampleclass.cpp
#include "sampleclass.h"

SampleClass::SampleClass()
    : m_data()
{
}

SampleClass::SampleClass( const double data )
    : m_data(data)
{
}

SampleClass::SampleClass( const SampleClass& rhs )
    : m_data(rhs.m_data)
{
}

SampleClass::~SampleClass()
{
}

SampleClass SampleClass::operator = ( const SampleClass& rhs )
{
    m_data = rhs.m_data;
    return *this;
}

bool SampleClass::isPositive() const
{
    return ( m_data >= 0.0 ) ? true : false;
}

double SampleClass::data() const
{
    return m_data;
}

1. テストプロジェクトの作成

「Qtユニットテスト」を選んでプロジェクトを作成し、後は適当に選んでいくだけ。
テストクラスのひな型が自動で作成される。

2. テストコードの実装

SampleClass::isPositive()のテストコードとして、

  1. test_isPositive_data()
  2. test_isPositive()

を書いてみた。

tst_sampletest.cpp
#include <QtCore/QString>
#include <QtTest/QtTest>

#include "sampleclass.h"

class SampleTest : public QObject
{
    Q_OBJECT

public:
    SampleTest();

private Q_SLOTS:
    void test_isPositive_data();
    void test_isPositive();
};

SampleTest::SampleTest()
{
}

void SampleTest::test_isPositive_data()
{
    QTest::addColumn<double>("input");
    QTest::addColumn<bool>("expected");

    QTest::newRow("case1") << -1.0 << false;
    QTest::newRow("case2") <<  0.0 << true;
    QTest::newRow("case3") <<  1.0 << true;
}

void SampleTest::test_isPositive()
{
    QFETCH( double, input );
    QFETCH( bool, expected );

    SampleClass obj( input );

    QCOMPARE( obj.isPositive(), expected );
}

QTEST_APPLESS_MAIN(SampleTest);

#include "tst_sampletest.moc"

後はこれをビルドして実行するだけ。

実行結果
********* Start testing of SampleTest *********
Config: Using QTest library 4.7.3, Qt 4.7.3
PASS   : SampleTest::initTestCase()
PASS   : SampleTest::test_isPositive()
PASS   : SampleTest::cleanupTestCase()
Totals: 3 passed, 0 failed, 0 skipped
********* Finished testing of SampleTest *********

他のテストフレームワークを使ったことがないので比較は出来ないけど、まあ、簡単なんじゃないかな?