[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()のテストコードとして、
- test_isPositive_data()
- 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 *********
他のテストフレームワークを使ったことがないので比較は出来ないけど、まあ、簡単なんじゃないかな?