Introduction to boost test
Upcoming SlideShare
Loading in...5
×
 

Introduction to boost test

on

  • 3,787 views

Boost.勉強会#8大阪にて発表したBoost.Testの紹介

Boost.勉強会#8大阪にて発表したBoost.Testの紹介

Statistics

Views

Total Views
3,787
Views on SlideShare
3,014
Embed Views
773

Actions

Likes
5
Downloads
34
Comments
0

4 Embeds 773

http://d.hatena.ne.jp 713
https://twitter.com 58
http://tweetedtimes.com 1
http://207.46.192.232 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Introduction to boost test Introduction to boost test Presentation Transcript

  • Boost.Testの紹介 @hotwatermorning12/02/11 Boost.勉強会 #8 大阪 1
  • 自己紹介 ● @hotwatermorning ● 札幌から来ました12/02/11 Boost.勉強会 #8 大阪 2
  • 自己紹介 ● @hotwatermorning ● 札幌から来ました ● 今季は水道が2回凍結 しました。12/02/11 Boost.勉強会 #8 大阪 3
  • 自己紹介 ● 2011年は、 <= C++の同人誌書いたり、Boost.勉強会 #6 @札幌を開催したりしました => http://www.flickr.com/photos/miio119/6318681082/ 12/02/11 Boost.勉強会 #8 大阪 4
  • Introduction12/02/11 Boost.勉強会 #8 大阪 5
  • Introduction 今日のお話Introduction ● Whats FeaturesHow to use ● Boost.Testの紹介Conclusion ● Boost.TestというBoostのユニットテ ストフレームワークを紹介します 12/02/11 Boost.勉強会 #8 大阪 6
  • Introduction 主な対象者Introduction ● Whats FeaturesHow to use ● C++でのテストに興味がある人。Conclusion ● Boost.Testに興味がある人。 ● Boost.TestをDISりたい人。 12/02/11 Boost.勉強会 #8 大阪 7
  • Introduction 〜 本日のレシピ 〜Introduction Whats FeaturesHow to use ● Whats the Boost.Test?Conclusion ● Boost.Testとは? ● What are the Features? ● どんな機能がある? ● How to use the Boost.Test ● Boost.Testの使い方/書き方 12/02/11 Boost.勉強会 #8 大阪 8
  • Whats the Boost.Test?12/02/11 Boost.勉強会 #8 大阪 9
  • Whats the Boost.Test?Introduction Whats ● Boost.Testとは FeaturesHow to use ● C++で書かれたC++のテストライブConclusion ラリ ● Boost C++ Librariesに含まれている ● ドキュメントが長い 12/02/11 Boost.勉強会 #8 大阪 10
  • Whats the Boost.Test?Introduction Whats ● Boost.Testとは FeaturesHow to use ● Execution MonitorConclusion ● Program Execution Monitor ● Minimal Testing Facility ● Unit Test Framework の4つの機能 12/02/11 Boost.勉強会 #8 大阪 11
  • Whats the Boost.Test?Introduction Whats ● Boost.Testとは FeaturesHow to use ● Execution MonitorConclusion ● Program Execution Monitor ● Minimal Testing Facility ● Unit Test Framework の4つの機能 12/02/11 Boost.勉強会 #8 大阪 12
  • Whats the Boost.Test?Introduction Whats ● Execution Monitor FeaturesHow to use ● Boost.Testの基礎 関数の実行を監視して統一的なConclusion ● エラーレポーティングの機能を提供 する。 ● 例外 ● UNIXのシグナル ● WindowsのSEH ● 面倒なエラー検出を簡単にする。 12/02/11 Boost.勉強会 #8 大阪 13
  • Whats the Boost.Test?Introduction Whats ● Execution Monitor FeaturesHow to use ● Boost.Testの基礎 関数の実行を監視して統一的なConclusion ● エラーレポーティングの機能を提供 する。 ● 例外 ● UNIXのシグナル ● WindowsのSEH ● 面倒なエラー検出を簡単にする。 12/02/11 Boost.勉強会 #8 大阪 14
  • Whats the Boost.Test?Introduction Whats ● Execution Monitor FeaturesHow to use ● Boost.Testの基礎 受け取れる例外は3種類。Conclusion ● ● C文字列 ● std::string ● std::exceptionから派生したクラス 12/02/11 Boost.勉強会 #8 大阪 15
  • Whats the Boost.Test?#include <stdexcept>#include <iostream>#include <boost/test/execution_monitor.hpp>#include <boost/test/utils/basic_cstring/io.hpp>int foo() { throw std::runtime_error("some error has occured"); return 0;}int main() { boost::execution_monitor mon; try { return mon.execute(foo);ᅠ ᅠ ᅠ } catch(boost::execution_exception const &e) {ᅠ ᅠ ᅠ ᅠ std::cout << e.what() << std::endl;ᅠ ᅠ }} 12/02/11 Boost.勉強会 #8 大阪 16
  • Whats the Boost.Test?Introduction Whats ● Execution Monitor FeaturesHow to use ● Boost.Testの基礎 受け取れる例外は、Conclusion ● ● C文字列 ● std::string ● std::exceptionから派生したクラス の3種類。 ● これ以外の例外をExecution Monitorで捕捉 したい場合はexecution_monitorの register_exception_translatorを使用する。 12/02/11 Boost.勉強会 #8 大阪 17
  • Whats the Boost.Test?struct my_error { my_error(int code) : code_(code) {} int code_;};void trns_my_error(my_error const& e) { throw std::domain_error(e.code_ == 0 ? "code is zero" : "otherwise");}int main() { boost::execution_monitor mon; mon.register_exception_translator<my_error>(&trns_my_error); try { return mon.execute(bar); //bar may throw my_error. } catch(boost::execution_exception const &e) { std::cout << e.what() << std::endl; }} 12/02/11 Boost.勉強会 #8 大阪 18
  • Whats the Boost.Test?Introduction Whats ● Boost.Testとは FeaturesHow to use ● Execution MonitorConclusion ● Program Execution Monitor ● Minimal Testing Facility ● Unit Test Framework の4つの機能 12/02/11 Boost.勉強会 #8 大阪 19
  • Whats the Boost.Test?Introduction Whats ● Program Execution Monitor FeaturesHow to use ● Execution Monitorで監視された環境Conclusion でプログラムを実行することで、 エラーレポーティングを簡単にす る。 ● main関数の代わりに提供される cpp_main関数からプログラムを開始 する。 12/02/11 Boost.勉強会 #8 大阪 20
  • Whats the Boost.Test?Introduction Whats ● Program Execution Monitor FeaturesHow to use ● cpp_main関数内から例外がなげられConclusion たり、0以外の値をcpp_mainから返 すとエラーだとみなす。 12/02/11 Boost.勉強会 #8 大阪 21
  • Whats the Boost.Test?#include <iostream>#include <boost/test/included/prg_exec_monitor.hpp>int cpp_main(int, char* []){ std::cout << "Hello, worldn"; return 0;}12/02/11 Boost.勉強会 #8 大阪 22
  • Whats the Boost.Test?#include <iostream>#include <boost/test/included/prg_exec_monitor.hpp>int cpp_main(int, char* []){ std::cout << "Hello, worldn"; return 0;}>./prg_exec_monitor_test.outHello, worldno errors detected12/02/11 Boost.勉強会 #8 大阪 23
  • Whats the Boost.Test?Introduction Whats ● Boost.Testとは FeaturesHow to use ● Execution MonitorConclusion ● Program Execution Monitor ● Minimal Testing Facility ● Unit Test Framework の4つの機能 12/02/11 Boost.勉強会 #8 大阪 24
  • Whats the Boost.Test?Introduction Whats ● Minimal Testing Facility テスト作成のための基本的な機能を Features ●How to useConclusion 提供。 ● Testing toolsの一部を使用できる。 ● boost/test/minimal.hppをインクルー ドして、main関数の代わりに test_main関数からプログラムを開始 する。 12/02/11 Boost.勉強会 #8 大阪 25
  • Whats the Boost.Test?Introduction Whats ● Minimal Testing Facility テスト作成のための基本的な機能を Features ●How to useConclusion 提供。 ● Testing toolsの一部を使用できる。 ● boost/test/minimal.hppをインクルー ドして、main関数の代わりに test_main関数からプログラムを開始 する。 12/02/11 Boost.勉強会 #8 大阪 26
  • Whats the Boost.Test?Introduction Whats ● Minimal Testing Facilityで提供されて Features いるTesting toolsHow to useConclusion ● BOOST_CHECK(pred) – predがfalseならエラーレポートして継続 ● BOOST_REQUIRE(pred) – predがfalseならエラーレポートして中断 ● BOOST_ERROR(message) – エラーレポートして継続 ● BOOST_FAIL(message) – エラーレポートして中断 12/02/11 Boost.勉強会 #8 大阪 27
  • Whats the Boost.Test?Introduction Whats ● Minimal Testing Facility ヘッダオンリーで使用できるので簡 Features ●How to useConclusion 単。 ● 一応Unit Test Framework(UTF)の方もヘッダ オンリーにすることができる。 しかしUTFの方は長期的に使用する場合は スタンドアロンライブラリとしてリンクす ることが推奨される。 12/02/11 Boost.勉強会 #8 大阪 28
  • Whats the Boost.Test?#include <boost/test/minimal.hpp>int add(int i, int j) { return i*j; }int test_main(int, char *[]) { BOOST_CHECK( add(2, 2) == 4 ); BOOST_CHECK( add(2, 3) == 5 ); return 0;} >./minimal_test_test.out minimal_test_test.cpp(6): test add(2, 3) == 5 failed in function: int test_main(int, char**) **** 1 error detected12/02/11 Boost.勉強会 #8 大阪 29
  • Whats the Boost.Test?Introduction Whats ● Boost.Testとは FeaturesHow to use ● Execution MonitorConclusion ● Program Execution Monitor ● Minimal Testing Facility ● Unit Test Framework の4つの機能 12/02/11 Boost.勉強会 #8 大阪 30
  • Whats the Boost.Test?Introduction Whats ● The Unit Test Framework(UTF) FeaturesHow to use ● Boost.Testのメイン機能 ヘッダオンリーあるいはスタンドアConclusion ● ロンライブラリとして使用できる。 12/02/11 Boost.勉強会 #8 大阪 31
  • Whats the Boost.Test?Introduction Whats ● Unit Testing Frameworkが満たすべ Features き要件How to useConclusion ● ユニットテストの作業は、プロジェ クトの実装初期からメンテナンス、 そして後々の改訂にいたるまで、ソ フトウェア開発のさまざまな段階で 発生する。 ● そのためUnit Testing Frameworkに 対して(時に衝突するような)多くの 性質が要求される 12/02/11 Boost.勉強会 #8 大阪 32
  • Requirements of UTF● シンプルで、使い始めの人にも分かりやすくユニットテ ストモジュールが書けるべき● 上級者が自明でないようなテストをすることも可能であ るべき● テストモジュールはたくさんの小さなテストケースを持 つことができ、開発者がそれをテストスイートにグルー プ化することができるべき● 開発初期にはユーザーは詳細で説明的なエラーメッセー ジを見たい。しかし回帰テスト中にはどのテストが失敗 したかだけを知りたい。12/02/11 Boost.勉強会 #8 大阪 33
  • Requirements of UTF(Contd)● 小さいテストモジュールの実行時間>コンパイル時間で あるべき。実行に1秒しかかからないテストのコンパイ ルに1分も待ちたくはない。● 長く複雑なテストではユーザーはテストの進捗を見られ るようにしたい。● 簡単なテストは外部ライブラリを必要とするべきではな い。● 長期的な使用のためにユニットテストフレームワークは スタンドアロンなライブラリとしてビルドできるべき。12/02/11 Boost.勉強会 #8 大阪 34
  • Whats the Boost.Test?Introduction Whats ● UTFの設計はこれらをベースにして Features いる。そしてUTFは多岐に渡る機能 を提供するHow to useConclusion ● さまざまなTesting toolsを使用することで簡 単にテストを書くことができる。 ● 一つのテストツリーの中にテストケースを組 織化できる。 ● 面倒なエラー検出とレポーティングの義務 とフレームワークの実行時パラメータ処理 からあなたを解放する。 などなど。ここらへんの話は http://www.boost.org/libs/test/doc/html/utf/intro.html に。 12/02/11 Boost.勉強会 #8 大阪 35
  • Whats the Boost.Test? 長い説明もつまらないのでちょっとIntroduction ● Whats Features 使ってみる。How to useConclusion 12/02/11 Boost.勉強会 #8 大阪 36
  • Whats the Boost.Test? #define BOOST_TEST_MODULE SimpleTest#include <boost/test/unit_test.hpp>BOOST_AUTO_TEST_SUITE(simple_test_suite) BOOST_AUTO_TEST_CASE(simple_test) { BOOST_CHECK_EQUAL(2+2, 4);} BOOST_AUTO_TEST_SUITE_END()12/02/11 Boost.勉強会 #8 大阪 37
  • Whats the Boost.Test?//テストモジュールの定義#define BOOST_TEST_MODULE SimpleTest#include <boost/test/unit_test.hpp>//テストスイートの定義とテストモジュールへの追加BOOST_AUTO_TEST_SUITE(simple_test_suite)//テストケースの定義とテストスイートへの追加BOOST_AUTO_TEST_CASE(simple_test) { BOOST_CHECK_EQUAL(2+2, 4);}BOOST_AUTO_TEST_SUITE_END()12/02/11 Boost.勉強会 #8 大阪 38
  • Whats the Features?12/02/11 Boost.勉強会 #8 大阪 39
  • Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 40
  • Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 41
  • Whats the Features?Introduction Whats ● Usage Variant FeaturesHow to use ● Testをする状況や環境に合わせて4Conclusion 種類のUTFの使用法が用意されてい る。 12/02/11 Boost.勉強会 #8 大阪 42
  • Whats the Features?Introduction Whats ● Usage Variant FeaturesHow to use ● Static Library VariantConclusion ● UTFをスタティックリンクする構成 ● Macでは使えない・・・? http://d.hatena.ne.jp/kei10in/20100623/1277294693 12/02/11 Boost.勉強会 #8 大阪 43
  • Whats the Features?Introduction Whats ● Usage Variant FeaturesHow to use ● Dynamic Library VariantConclusion ● UTFをダイナミックリンクする構成 ● #define BOOST_TEST_DYN_LINK ● (メインになる)ただひとつのソースの boost/test/unit_test.hppの、そのインクルー ド前にBOOST_TEST_MAINを定義する。 あるいはBOOST_TEST_MODULEを使用し てもOK。 12/02/11 Boost.勉強会 #8 大阪 44
  • Whats the Features?Introduction Whats ● Usage Variant FeaturesHow to use ● Dynamic Library VariantConclusion ● Static Library Variantを使用すると バイナリが大きくなるので、Static Library Variantを使用した大量のテ ストのプロジェクトがあるとスト レージの容量的な問題が起こるか も。その場合にはDynamic Library Variantを使用したほう良い。 12/02/11 Boost.勉強会 #8 大阪 45
  • Whats the Features?Introduction Whats ● Usage Variant FeaturesHow to use ● Single-Header VariantConclusion ● UTFをヘッダオンリーにする構成 ● テストモジュールのソースがひとつ だけの時使える。 ● (コンパイル時間を考えると)長期 的な使用にはスタティックリンクか ダイナミックリンクを使用するべき ● #include <boost/test/included/unit_test.hpp> 12/02/11 Boost.勉強会 #8 大阪 46
  • Whats the Features?Introduction Whats ● Usage Variant FeaturesHow to use ● External Test Runner Variant ビルトインではないテストランナーConclusion ● を使用する構成 ● テストモジュールはダイナミックリ ンクライブラリとして作成する ● #define BOOST_TEST_DYN_LINK 12/02/11 Boost.勉強会 #8 大阪 47
  • Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 48
  • Whats the Features? テストランナー(Test Runner)Introduction ● Whats テストの実行を管理する Features ●How to useConclusion ● テストモジュールのエントリポイント ● 実行時パラメータ(コマンドライン引数など) からUTFを初期化する ● ログとテストのレポート用にOutputを準備 ● などなど・・・ 12/02/11 Boost.勉強会 #8 大阪 49
  • Whats the Features? テストランナー(Test Runner)Introduction ● Whats ビルトイン以外のテストランナーを Features ●How to useConclusion 使用することができる。 (先進的なテストランナーはGUIや テストカバレッジの機能を備えてい るかも) (でも見たことない) ● 今日は扱いません。あとよく分かり ません。 語りえぬものについては、沈黙しなければ ならない 12/02/11 Boost.勉強会 #8 大阪 50
  • Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 51
  • Whats the Features? モジュール初期化関数Introduction ● Whats テストツリーを構築するなど…? Features ●How to use ほとんどビルトインのもので済むのConclusion ● で使わなくても大丈夫 ● 今日は扱いません。あとよく分かり ません。 語りえぬものについては、沈黙しなければ ならない 12/02/11 Boost.勉強会 #8 大阪 52
  • Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 53
  • Whats the Features? テストの定義と組織化Introduction ● Whats FeaturesHow to useConclusion ● テストケースを作成 ● テストケースをテストスイートにグ ループ化できる ● テストスイートをさらに大きなテス トスイートにグループ化できる 12/02/11 Boost.勉強会 #8 大阪 54
  • Whats the Boost.Test?( 再掲 )//テストモジュールの定義#define BOOST_TEST_MODULE SimpleTest#include <boost/test/unit_test.hpp>//テストスイートの定義とテストモジュールへの追加BOOST_AUTO_TEST_SUITE(simple_test_suite)//テストケースの定義とテストスイートへの追加BOOST_AUTO_TEST_CASE(simple_test) { BOOST_CHECK_EQUAL(2+2, 4);}BOOST_AUTO_TEST_SUITE_END()12/02/11 Boost.勉強会 #8 大阪 55
  • Whats the Features? テストの定義と組織化Introduction ● Whats FeaturesHow to use ● BOOST_AUTO_TEST_CASE(Conclusion test_case_name ) ● 引数なしテストケースを定義する BOOST_AUTO_TEST_CASE(test_case_name) { BOOST_AUTO_TEST_CASE(test_case_name) { //test body //test body } } ● 手動でテストケースの登録を行う場合は、引 数付きのテストケースを使うことができる。 12/02/11 Boost.勉強会 #8 大阪 56
  • Whats the Features? テストの定義と組織化Introduction ● Whats FeaturesHow to use ● BOOST_AUTO_TEST_CASE_TEMPLATE(Conclusion test_case_name, formal_type_parameter_name, collection_of_types ) ● テンプレートを使用したテストケー スを定義する ● 同じ内容で型のみが異なるテストを 書くときに便利 12/02/11 Boost.勉強会 #8 大阪 57
  • Whats the Features? テストの定義と組織化Introduction ● Whats FeaturesHow to use ● BOOST_AUTO_TEST_SUITE(Conclusion test_suite_name ) ● テストスイートを定義する BOOST_AUTO_TEST_SUITE(test_suite_name) BOOST_AUTO_TEST_SUITE(test_suite_name) // some tests // some tests // BOOST_AUTO_TEST_CASE(test1) // BOOST_AUTO_TEST_CASE(test1) // { /**/ } // { /**/ } BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_SUITE_END() 12/02/11 Boost.勉強会 #8 大阪 58
  • Whats the Features? テストの定義と組織化Introduction ● Whats テストケースはテストスイートのなか Features ● に複数含めることができる。How to useConclusion ● テストスイートは入れ子になること ができる。 12/02/11 Boost.勉強会 #8 大阪 59
  • Whats the Boost.Test?#include <boost/test/unit_test.hpp>BOOST_AUTO_TEST_SUITE(suite1) BOOST_AUTO_TEST_SUITE(suite2) BOOST_AUTO_TEST_CASE(test1) { /**/ } BOOST_AUTO_TEST_CASE(test2) { /**/ } BOOST_AUTO_TEST_SUITE_END() BOOST_AUTO_TEST_CASE(test3) { /**/ }BOOST_AUTO_TEST_SUITE_END()12/02/11 Boost.勉強会 #8 大阪 60
  • Whats the Boost.Test? Master Test Suite Master Test Suite suite1 suite1 suite2 suite2 test3 test3 test2 test2 test1 test112/02/11 Boost.勉強会 #8 大阪 61
  • Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 62
  • Whats the Features?Introduction Whats ● Fixture テストケースなどで以下の役割を担 Features ●How to useConclusion う ● テスト開始前に状態を整える ● テストに関する特定の状態を用意する ● テスト終了後にクリーンアップをする 12/02/11 Boost.勉強会 #8 大阪 63
  • Whats the Features?Introduction Whats ● Generic Fixture Model FeaturesHow to useConclusion struct <fixture-name>{ struct <fixture-name>{ <fixture-name>(); // setup function <fixture-name>(); // setup function ~<fixture-name>(); // teardown function ~<fixture-name>(); // teardown function }; }; 12/02/11 Boost.勉強会 #8 大阪 64
  • Whats the Boost.Test?//Fixtureを使ったテストの例struct MyFixture { MyFixture() { i = new int; *i = 0 } ~ MyFixture() { delete i; } int * i;};BOOST_AUTO_TEST_CASE( test_case1 ){ MyFixture f; // do something involving f.i}12/02/11 Boost.勉強会 #8 大阪 65
  • Whats the Boost.Test?//Fixtureを使ったテストの例struct MyFixture { MyFixture() { i = new int; *i = 0 } ~ MyFixture() { delete i; } int * i;};BOOST_AUTO_TEST_CASE( test_case1 ){ MyFixture f; // do something involving f.i}12/02/11 Boost.勉強会 #8 大阪 66
  • Whats the Boost.Test?struct MyFixture { MyFixture() { i = new int; *i = 0 } ~ MyFixture() { delete i; } int * i;};BOOST_FIXTURE_TEST_CASE( test_case1, MyFixture ){ // do something involving i}// test_cast1を開始する前にMyFixtureを構築して、// test_case1が終わるとMyFixtureを破棄する12/02/11 Boost.勉強会 #8 大阪 67
  • Whats the Features?Introduction Whats ● Fixture テストケースなどで以下の役割を担 Features ●How to useConclusion う ● テスト開始前に状態を整える ● テストに関する特定の状態を用意する ● テスト終了後にクリーンアップをする 12/02/11 Boost.勉強会 #8 大阪 68
  • Whats the Features?Introduction Whats ● Fixture FeaturesHow to use ● 3つのレベルでSetupとCleanupを行Conclusion うことができる ● テストケース ● テストスイート ● グローバル 12/02/11 Boost.勉強会 #8 大阪 69
  • Whats the Features?Introduction Whats ● Fixtureの設定 FeaturesHow to use ● BOOST_FIXTURE_TEST_CASE(Conclusion test_case_name, fixure_name) ● テストケースごとのFixtureを設定 12/02/11 Boost.勉強会 #8 大阪 70
  • Whats the Features?Introduction Whats ● Fixtureの設定 FeaturesHow to use ● BOOST_FIXTURE_TEST_SUITE(Conclusion test_suite_name, fixure_name) ● テストスイートごとのFixtureを設定 ● テストスイート内の各テストケース が同じFixtureを使用したいときの為 にテストスイートレベルでFixtureを 使用できる。 12/02/11 Boost.勉強会 #8 大阪 71
  • Whats the Features?Introduction Whats ● Fixtureの設定 FeaturesHow to use ● BOOST_GLOBAL_FIXTURE(Conclusion fixure_name) ● グローバルなFixtureを設定 ● テストの開始時の初期化を担う ● テスト用の各ソースファイルに複数 の別のグローバルなFixtureを設定す ることも可能 12/02/11 Boost.勉強会 #8 大阪 72
  • Whats the Features?Introduction Whats ● Fixtureの設定 FeaturesHow to use ● BOOST_GLOBAL_FIXTURE(Conclusion fixure_name) ● グローバルなFixtureを設定 ● テストの開始時の初期化を担う ● テスト用の各ソースファイルに複数 の別のグローバルなFixtureを設定す ることも可能 ● でもデストラクト順が厄介・・・? 12/02/11 Boost.勉強会 #8 大阪 73
  • Whats the Boost.Test?struct F1 { F1() { std::cout << "F1" << std::endl; } ~F1() { std::cout << "~F1" << std::endl; }};//同様にF2, F3を定義する12/02/11 Boost.勉強会 #8 大阪 74
  • Whats the Boost.Test?BOOST_GLOBAL_FIXTURE(F1);BOOST_GLOBAL_FIXTURE(F2);BOOST_GLOBAL_FIXTURE(F3);BOOST_AUTO_TEST_SUITE(global_fixture_test_suite)BOOST_AUTO_TEST_CASE(global_fixture_test){ //nop}BOOST_AUTO_TEST_SUITE_END()12/02/11 Boost.勉強会 #8 大阪 75
  • Whats the Boost.Test?BOOST_GLOBAL_FIXTURE(F1);BOOST_GLOBAL_FIXTURE(F2);BOOST_GLOBAL_FIXTURE(F3);BOOST_AUTO_TEST_SUITE(global_fixture_test_suite)BOOST_AUTO_TEST_CASE(global_fixture_test){ F1 //nop F2} F3 Running 1 test case... ~F1BOOST_AUTO_TEST_SUITE_END() ~F2 ~F312/02/11 Boost.勉強会 #8 大阪 76
  • Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 77
  • Whats the Features? テストの出力Introduction ● Whats 全てのテストで統一的なレポートを Features ●How to useConclusion ● エラーについて、ソース上の詳細な 情報を ● テストのエラーの記述(test log)はテ スト結果の要約(test results report) とは分離する ● 柔軟な出力内容 ● 柔軟な出力の形式 12/02/11 Boost.勉強会 #8 大阪 78
  • Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Test LogConclusion ● Test Report ● Progress Display 12/02/11 Boost.勉強会 #8 大阪 79
  • Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Test LogConclusion ● Test Report ● Progress Display 12/02/11 Boost.勉強会 #8 大阪 80
  • Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Test LogのレベルConclusion ● Success information messages ● Test tree traversal notifications ● General information messages ● Warning messages ● Non fatal error messages ● Uncaught C++ exceptions notifications ● Non-fatal system error ● Fatal system error 12/02/11 Boost.勉強会 #8 大阪 81
  • Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Test Logのレベル 各レベルは下のレベルの内容を含むConclusion ● ● デフォルトはNon fatal error messages ● 各レベルの詳細は http://www.boost.org/libs/test/doc/html/utf/user-guide/test-output/test-log.htm を参照。 12/02/11 Boost.勉強会 #8 大阪 82
  • Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● operator<<のインターフェースを持Conclusion たない型がlogに出力されようとした ときはコンパイルエラーになる。 ● そのコンパイルエラーを避ける場 合、あるいはlogに出力したくない場 合は BOOST_TEST_DONT_PRINT_LOG_VALUE( ArgumentType ) を使用する 12/02/11 Boost.勉強会 #8 大阪 83
  • Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use BOOST_TEST_MESSAGE(Conclusion test_message ) ● Logにメッセージをさしこむ ● ただし、デフォルトのLogレベルの 設定では出力されない ● LogレベルをGeneral information messages 以上にする 12/02/11 Boost.勉強会 #8 大阪 84
  • Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Test Logのレベル 各レベルの詳細はConclusion ● http://www.boost.org/libs/test/doc/html/utf/user-guide/test-output/test-log.html を参照。 12/02/11 Boost.勉強会 #8 大阪 85
  • Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use BOOST_TEST_CHECKPOINT(Conclusion checkpoint_message) ● Logに名前付きのチェックポイント をさしこむ 12/02/11 Boost.勉強会 #8 大阪 86
  • Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Logの出力フォーマットConclusion ● Human Readable – Microsoft系C++コンパイラのエ ラー記述に似た形式でLogを出 力 ● XML – XML形式でLogを出力 12/02/11 Boost.勉強会 #8 大阪 87
  • Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Logの出力先をコンパイル時に設定Conclusion unit_test_log.set_stream( std::ostream& str ); 12/02/11 Boost.勉強会 #8 大阪 88
  • Whats the Boost.Test?struct MyConfig { MyConfig() : test_log( "example.log" ) { boost::unit_test::unit_test_log.set_stream( test_log ); } ~MyConfig() { boost::unit_test::unit_test_log.set_stream( std::cout ); } std::ofstream test_log;};BOOST_GLOBAL_FIXTURE( MyConfig );BOOST_AUTO_TEST_CASE( test_case ){ //... 12/02/11 Boost.勉強会 #8 大阪 89
  • Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Log出力のレベルをコンパイル時にConclusion 設定する unit_test_log.set_threshold_level( boost::unit_test::log_level ); 12/02/11 Boost.勉強会 #8 大阪 90
  • Whats the Features?using namespace boost::unit_test;BOOST_AUTO_TEST_CASE( test_case0 ){ if ( runtime_config::log_level() < log_warnings ) unit_test_log.set_threshold_level( log_warnings ); BOOST_WARN( sizeof(int) > 4 );}12/02/11 Boost.勉強会 #8 大阪 91
  • Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Test LogConclusion ● Test Report ● Progress Display 12/02/11 Boost.勉強会 #8 大阪 92
  • Whats the Features? テストの出力Introduction ● Whats テストレポートの出力 Features ●How to useConclusion ● Runtime configuration ● Compile time configuration ● Report output stream redirection and access ● Report level configuration ● Predefined report format selection ● Custom report format support 12/02/11 Boost.勉強会 #8 大阪 93
  • Whats the Features? テストの出力Introduction ● Whats テストレポートの出力 Features ●How to useConclusion ● Runtime configuration ● Compile time configuration ● Report output stream redirection and access ● Report level configuration ● Predefined report format selection ● Custom report format support ● ドキュメントに詳細がない・・・? 12/02/11 Boost.勉強会 #8 大阪 94
  • Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Test LogConclusion ● Test Report ● Progress Display 12/02/11 Boost.勉強会 #8 大阪 95
  • Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Progress Display 次に紹介する実行時設定Conclusion ● show_progress を使用する。 > example --show_progress=yes --log_level=nothing 0% 10 20 30 40 50 60 70 80 90 100% |----|----|----|----|----|----|----|----|----|----| *************************************************** *** No errors detected 12/02/11 Boost.勉強会 #8 大阪 96
  • Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 97
  • Whats the Features? 実行時のテスト設定Introduction ● Whats 環境変数、あるいは実行時引数でロ Features ● グ出力の挙動を設定するHow to useConclusion ● auto_start_dbg ● build_info ● catch_system_errors ● detect_memory_leak ● detect_fp_exceptions 12/02/11 Boost.勉強会 #8 大阪 98
  • Whats the Features? 実行時のテスト設定Introduction ● Whats 環境変数、あるいは実行時引数でロ Features ● グ出力の挙動を設定するHow to useConclusion ● log_format ● log_level ● output_format ● random ● report_format 12/02/11 Boost.勉強会 #8 大阪 99
  • Whats the Features? 実行時のテスト設定Introduction ● Whats 環境変数、あるいは実行時引数でロ Features ● グ出力の挙動を設定するHow to useConclusion ● report_level ● result_code ● run_test ● show_progress ● use_alt_stack 12/02/11 Boost.勉強会 #8 大阪 100
  • Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 101
  • Whats the Features? Testing toolsIntroduction ● Whats Minimal Testing Facilityの例で使 Features ● 用したBOOST_CHECKなどHow to useConclusion 12/02/11 Boost.勉強会 #8 大阪 102
  • Whats the Features? Testing toolsIntroduction ● Whats 複数のマクロと関数宣言からなる Features ● ツール集。How to useConclusion ● テストの作成と管理を容易にして、 統一的なエラーレポーティングの仕 組みを提供する。 ● 全てのツールは自動的にエラーレ ポーティングにエラーの位置情報 (ファイル名と行番号) 12/02/11 Boost.勉強会 #8 大阪 103
  • Whats the Features? Testing tools flavorsIntroduction ● Whats 全てのテストツールにはflavorsが提 Features ● 供されているHow to useConclusion ● テストツールのアサーションについ てのレベル的なもの 12/02/11 Boost.勉強会 #8 大阪 104
  • Whats the Features? Testing tools flavorsIntroduction ● Whats WARN Features ●How to useConclusion ● 警告 ● エラーカウント:そのまま ● テストの実行:継続 12/02/11 Boost.勉強会 #8 大阪 105
  • Whats the Features? Testing tools flavorsIntroduction ● Whats CHECK Features ●How to useConclusion ● エラーチェック ● エラーカウント:増加 ● テストの実行:継続 12/02/11 Boost.勉強会 #8 大阪 106
  • Whats the Features? Testing tools flavorsIntroduction ● Whats REQUIRE Features ●How to useConclusion ● 必要条件チェック ● エラーカウント:増加 ● テストの実行:中断 12/02/11 Boost.勉強会 #8 大阪 107
  • Whats the Features? 提供されているTesting toolsIntroduction ● Whats BOOST_<level> Features ●How to useConclusion BOOST_CHECK( i == 1 ); BOOST_CHECK( i == 1 ); BOOST_REQUIRE( !str.empty() ); BOOST_REQUIRE( !str.empty() ); Running 1 test case... testing_tool_test.cpp:10: error in "testing_tool_test": check i == 1 failed testing_tool_test.cpp:11: fatal error in "testing_tool_test": critical check !str.empty() failed *** 2 failures detected in test suite "Master Test Suite" 12/02/11 Boost.勉強会 #8 大阪 108
  • Whats the Features? 提供されているTesting toolsIntroduction ● Whats BOOST_<level>_EQUAL Features ●How to useConclusion BOOST_CHECK_EQUAL( i, 1 ); BOOST_CHECK_EQUAL( i, 1 ); BOOST_REQUIRE_EQUAL( str, “STRING” ); BOOST_REQUIRE_EQUAL( str, “STRING” ); Running 1 test case... testing_tool_test.cpp:10: error in "testing_tool_test": check i == 1 failed [0 != 1] testing_tool_test.cpp:11: fatal error in "testing_tool_test": critical check str == "STRING" failed [ != STRING] *** 2 failures detected in test suite "Master Test Suite" 12/02/11 Boost.勉強会 #8 大阪 109
  • Whats the Features? 提供されているTesting toolsIntroduction ● Whats などなど・・・ Features ●How to useConclusion ● 詳しくはドキュメントに書いてあり ます。 12/02/11 Boost.勉強会 #8 大阪 110
  • Whats the Features? 提供されているTesting toolsIntroduction ● Whats Testing toolsを使うことでテストの Features ● 意味を分かりやすく書くことがでHow to useConclusion き、さらに統一的なエラーレポー ティングができるようになる。 12/02/11 Boost.勉強会 #8 大阪 111
  • How to use the Boost.Test12/02/11 Boost.勉強会 #8 大阪 112
  • How to use the Boost.Test デモIntroduction ● Whats FeaturesHow to useConclusion 12/02/11 Boost.勉強会 #8 大阪 113
  • Conclusion12/02/11 Boost.勉強会 #8 大阪 114
  • ConclusionIntroduction Whats ● Boost.Testを使うことで、C++のテ Features ストを自動的に組織しながらテストHow to useConclusion を書くことができる。 ● 実行時引数を設定することで、柔軟 にテストをすることができる。 ● Testing toolsを使うことでテスト内 容を明確にすることができる。 ● (Boostに含まれてるので)普段から Boostを使っている人は導入しやす い。 12/02/11 Boost.勉強会 #8 大阪 115
  • Conclusion 欠点Introduction ● Whats 実行時にスキップするテストを選ぶ Features ● ことが出来ないHow to useConclusion ● Mockの仕組みがない ● テスト出力のストリームがワイド文 字列対応していない 12/02/11 Boost.勉強会 #8 大阪 116
  • Conclusion 欠点Introduction ● Whats 実行時にスキップするテストを選ぶ Features ● ことが出来ないHow to useConclusion ● Mockの仕組みがない ● テスト出力のストリームがワイド文 字列対応していない 12/02/11 Boost.勉強会 #8 大阪 117
  • ConclusionIntroduction Whats ● Mockの仕組みがない Features http://alexott.net/en/cpp/CppTestingIntro.htmlHow to useConclusion ● ここにGoogle MockとBoost.Testを 組み合わせたテストの紹介がありま す。 12/02/11 Boost.勉強会 #8 大阪 118
  • ConclusionIntroduction Whats ● Mockの仕組みがない アンドキュメントだがあるらし Features ●How to useConclusion い・・・?(@cpp_akiraさん情報ありがとうございます) ● see boost/libs/test/example/example/est_example1.cpp ● see boost/libs/test/example/example/est_example2.cpp 12/02/11 Boost.勉強会 #8 大阪 119
  • Conclusion 参考文献/サイトIntroduction ● Whats Features ● http://www.boost.org/libs/test/doc/html/How to use ● http://alexott.net/en/cpp/CppTestingIntro.htmlConclusion ● http://www.alittlemadness.com/2009/03/31/c-unit-testing-with-boosttest/ ● http://blog.livedoor.jp/naoya_t/archives/51043392.html 12/02/11 Boost.勉強会 #8 大阪 120
  • Conclusion 質問など・・・Introduction ● Whats FeaturesHow to useConclusion 12/02/11 Boost.勉強会 #8 大阪 121
  • Thank You! ありがとうございました!12/02/11 Boost.勉強会 #8 大阪 122