Introduction to boost test

4,625 views

Published on

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

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,625
On SlideShare
0
From Embeds
0
Number of Embeds
833
Actions
Shares
0
Downloads
40
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

Introduction to boost test

  1. 1. Boost.Testの紹介 @hotwatermorning12/02/11 Boost.勉強会 #8 大阪 1
  2. 2. 自己紹介 ● @hotwatermorning ● 札幌から来ました12/02/11 Boost.勉強会 #8 大阪 2
  3. 3. 自己紹介 ● @hotwatermorning ● 札幌から来ました ● 今季は水道が2回凍結 しました。12/02/11 Boost.勉強会 #8 大阪 3
  4. 4. 自己紹介 ● 2011年は、 <= C++の同人誌書いたり、Boost.勉強会 #6 @札幌を開催したりしました => http://www.flickr.com/photos/miio119/6318681082/ 12/02/11 Boost.勉強会 #8 大阪 4
  5. 5. Introduction12/02/11 Boost.勉強会 #8 大阪 5
  6. 6. Introduction 今日のお話Introduction ● Whats FeaturesHow to use ● Boost.Testの紹介Conclusion ● Boost.TestというBoostのユニットテ ストフレームワークを紹介します 12/02/11 Boost.勉強会 #8 大阪 6
  7. 7. Introduction 主な対象者Introduction ● Whats FeaturesHow to use ● C++でのテストに興味がある人。Conclusion ● Boost.Testに興味がある人。 ● Boost.TestをDISりたい人。 12/02/11 Boost.勉強会 #8 大阪 7
  8. 8. 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
  9. 9. Whats the Boost.Test?12/02/11 Boost.勉強会 #8 大阪 9
  10. 10. Whats the Boost.Test?Introduction Whats ● Boost.Testとは FeaturesHow to use ● C++で書かれたC++のテストライブConclusion ラリ ● Boost C++ Librariesに含まれている ● ドキュメントが長い 12/02/11 Boost.勉強会 #8 大阪 10
  11. 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 大阪 11
  12. 12. 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
  13. 13. Whats the Boost.Test?Introduction Whats ● Execution Monitor FeaturesHow to use ● Boost.Testの基礎 関数の実行を監視して統一的なConclusion ● エラーレポーティングの機能を提供 する。 ● 例外 ● UNIXのシグナル ● WindowsのSEH ● 面倒なエラー検出を簡単にする。 12/02/11 Boost.勉強会 #8 大阪 13
  14. 14. Whats the Boost.Test?Introduction Whats ● Execution Monitor FeaturesHow to use ● Boost.Testの基礎 関数の実行を監視して統一的なConclusion ● エラーレポーティングの機能を提供 する。 ● 例外 ● UNIXのシグナル ● WindowsのSEH ● 面倒なエラー検出を簡単にする。 12/02/11 Boost.勉強会 #8 大阪 14
  15. 15. 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
  16. 16. 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
  17. 17. 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
  18. 18. 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
  19. 19. 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
  20. 20. Whats the Boost.Test?Introduction Whats ● Program Execution Monitor FeaturesHow to use ● Execution Monitorで監視された環境Conclusion でプログラムを実行することで、 エラーレポーティングを簡単にす る。 ● main関数の代わりに提供される cpp_main関数からプログラムを開始 する。 12/02/11 Boost.勉強会 #8 大阪 20
  21. 21. Whats the Boost.Test?Introduction Whats ● Program Execution Monitor FeaturesHow to use ● cpp_main関数内から例外がなげられConclusion たり、0以外の値をcpp_mainから返 すとエラーだとみなす。 12/02/11 Boost.勉強会 #8 大阪 21
  22. 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;}12/02/11 Boost.勉強会 #8 大阪 22
  23. 23. 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
  24. 24. 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
  25. 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 大阪 25
  26. 26. 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
  27. 27. 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
  28. 28. Whats the Boost.Test?Introduction Whats ● Minimal Testing Facility ヘッダオンリーで使用できるので簡 Features ●How to useConclusion 単。 ● 一応Unit Test Framework(UTF)の方もヘッダ オンリーにすることができる。 しかしUTFの方は長期的に使用する場合は スタンドアロンライブラリとしてリンクす ることが推奨される。 12/02/11 Boost.勉強会 #8 大阪 28
  29. 29. 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
  30. 30. 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
  31. 31. Whats the Boost.Test?Introduction Whats ● The Unit Test Framework(UTF) FeaturesHow to use ● Boost.Testのメイン機能 ヘッダオンリーあるいはスタンドアConclusion ● ロンライブラリとして使用できる。 12/02/11 Boost.勉強会 #8 大阪 31
  32. 32. Whats the Boost.Test?Introduction Whats ● Unit Testing Frameworkが満たすべ Features き要件How to useConclusion ● ユニットテストの作業は、プロジェ クトの実装初期からメンテナンス、 そして後々の改訂にいたるまで、ソ フトウェア開発のさまざまな段階で 発生する。 ● そのためUnit Testing Frameworkに 対して(時に衝突するような)多くの 性質が要求される 12/02/11 Boost.勉強会 #8 大阪 32
  33. 33. Requirements of UTF● シンプルで、使い始めの人にも分かりやすくユニットテ ストモジュールが書けるべき● 上級者が自明でないようなテストをすることも可能であ るべき● テストモジュールはたくさんの小さなテストケースを持 つことができ、開発者がそれをテストスイートにグルー プ化することができるべき● 開発初期にはユーザーは詳細で説明的なエラーメッセー ジを見たい。しかし回帰テスト中にはどのテストが失敗 したかだけを知りたい。12/02/11 Boost.勉強会 #8 大阪 33
  34. 34. Requirements of UTF(Contd)● 小さいテストモジュールの実行時間>コンパイル時間で あるべき。実行に1秒しかかからないテストのコンパイ ルに1分も待ちたくはない。● 長く複雑なテストではユーザーはテストの進捗を見られ るようにしたい。● 簡単なテストは外部ライブラリを必要とするべきではな い。● 長期的な使用のためにユニットテストフレームワークは スタンドアロンなライブラリとしてビルドできるべき。12/02/11 Boost.勉強会 #8 大阪 34
  35. 35. 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
  36. 36. Whats the Boost.Test? 長い説明もつまらないのでちょっとIntroduction ● Whats Features 使ってみる。How to useConclusion 12/02/11 Boost.勉強会 #8 大阪 36
  37. 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 大阪 37
  38. 38. 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
  39. 39. Whats the Features?12/02/11 Boost.勉強会 #8 大阪 39
  40. 40. Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 40
  41. 41. Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 41
  42. 42. Whats the Features?Introduction Whats ● Usage Variant FeaturesHow to use ● Testをする状況や環境に合わせて4Conclusion 種類のUTFの使用法が用意されてい る。 12/02/11 Boost.勉強会 #8 大阪 42
  43. 43. 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
  44. 44. 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
  45. 45. 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
  46. 46. 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
  47. 47. 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
  48. 48. Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 48
  49. 49. Whats the Features? テストランナー(Test Runner)Introduction ● Whats テストの実行を管理する Features ●How to useConclusion ● テストモジュールのエントリポイント ● 実行時パラメータ(コマンドライン引数など) からUTFを初期化する ● ログとテストのレポート用にOutputを準備 ● などなど・・・ 12/02/11 Boost.勉強会 #8 大阪 49
  50. 50. Whats the Features? テストランナー(Test Runner)Introduction ● Whats ビルトイン以外のテストランナーを Features ●How to useConclusion 使用することができる。 (先進的なテストランナーはGUIや テストカバレッジの機能を備えてい るかも) (でも見たことない) ● 今日は扱いません。あとよく分かり ません。 語りえぬものについては、沈黙しなければ ならない 12/02/11 Boost.勉強会 #8 大阪 50
  51. 51. Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 51
  52. 52. Whats the Features? モジュール初期化関数Introduction ● Whats テストツリーを構築するなど…? Features ●How to use ほとんどビルトインのもので済むのConclusion ● で使わなくても大丈夫 ● 今日は扱いません。あとよく分かり ません。 語りえぬものについては、沈黙しなければ ならない 12/02/11 Boost.勉強会 #8 大阪 52
  53. 53. Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 53
  54. 54. Whats the Features? テストの定義と組織化Introduction ● Whats FeaturesHow to useConclusion ● テストケースを作成 ● テストケースをテストスイートにグ ループ化できる ● テストスイートをさらに大きなテス トスイートにグループ化できる 12/02/11 Boost.勉強会 #8 大阪 54
  55. 55. 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
  56. 56. 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
  57. 57. 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
  58. 58. 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
  59. 59. Whats the Features? テストの定義と組織化Introduction ● Whats テストケースはテストスイートのなか Features ● に複数含めることができる。How to useConclusion ● テストスイートは入れ子になること ができる。 12/02/11 Boost.勉強会 #8 大阪 59
  60. 60. 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
  61. 61. 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
  62. 62. Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 62
  63. 63. Whats the Features?Introduction Whats ● Fixture テストケースなどで以下の役割を担 Features ●How to useConclusion う ● テスト開始前に状態を整える ● テストに関する特定の状態を用意する ● テスト終了後にクリーンアップをする 12/02/11 Boost.勉強会 #8 大阪 63
  64. 64. 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
  65. 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 大阪 65
  66. 66. 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
  67. 67. 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
  68. 68. Whats the Features?Introduction Whats ● Fixture テストケースなどで以下の役割を担 Features ●How to useConclusion う ● テスト開始前に状態を整える ● テストに関する特定の状態を用意する ● テスト終了後にクリーンアップをする 12/02/11 Boost.勉強会 #8 大阪 68
  69. 69. Whats the Features?Introduction Whats ● Fixture FeaturesHow to use ● 3つのレベルでSetupとCleanupを行Conclusion うことができる ● テストケース ● テストスイート ● グローバル 12/02/11 Boost.勉強会 #8 大阪 69
  70. 70. 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
  71. 71. 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
  72. 72. Whats the Features?Introduction Whats ● Fixtureの設定 FeaturesHow to use ● BOOST_GLOBAL_FIXTURE(Conclusion fixure_name) ● グローバルなFixtureを設定 ● テストの開始時の初期化を担う ● テスト用の各ソースファイルに複数 の別のグローバルなFixtureを設定す ることも可能 12/02/11 Boost.勉強会 #8 大阪 72
  73. 73. Whats the Features?Introduction Whats ● Fixtureの設定 FeaturesHow to use ● BOOST_GLOBAL_FIXTURE(Conclusion fixure_name) ● グローバルなFixtureを設定 ● テストの開始時の初期化を担う ● テスト用の各ソースファイルに複数 の別のグローバルなFixtureを設定す ることも可能 ● でもデストラクト順が厄介・・・? 12/02/11 Boost.勉強会 #8 大阪 73
  74. 74. 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
  75. 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){ //nop}BOOST_AUTO_TEST_SUITE_END()12/02/11 Boost.勉強会 #8 大阪 75
  76. 76. 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
  77. 77. Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 77
  78. 78. Whats the Features? テストの出力Introduction ● Whats 全てのテストで統一的なレポートを Features ●How to useConclusion ● エラーについて、ソース上の詳細な 情報を ● テストのエラーの記述(test log)はテ スト結果の要約(test results report) とは分離する ● 柔軟な出力内容 ● 柔軟な出力の形式 12/02/11 Boost.勉強会 #8 大阪 78
  79. 79. Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Test LogConclusion ● Test Report ● Progress Display 12/02/11 Boost.勉強会 #8 大阪 79
  80. 80. Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Test LogConclusion ● Test Report ● Progress Display 12/02/11 Boost.勉強会 #8 大阪 80
  81. 81. 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
  82. 82. 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
  83. 83. 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
  84. 84. 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
  85. 85. 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
  86. 86. Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use BOOST_TEST_CHECKPOINT(Conclusion checkpoint_message) ● Logに名前付きのチェックポイント をさしこむ 12/02/11 Boost.勉強会 #8 大阪 86
  87. 87. Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Logの出力フォーマットConclusion ● Human Readable – Microsoft系C++コンパイラのエ ラー記述に似た形式でLogを出 力 ● XML – XML形式でLogを出力 12/02/11 Boost.勉強会 #8 大阪 87
  88. 88. Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Logの出力先をコンパイル時に設定Conclusion unit_test_log.set_stream( std::ostream& str ); 12/02/11 Boost.勉強会 #8 大阪 88
  89. 89. 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
  90. 90. 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
  91. 91. 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
  92. 92. Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Test LogConclusion ● Test Report ● Progress Display 12/02/11 Boost.勉強会 #8 大阪 92
  93. 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 大阪 93
  94. 94. 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
  95. 95. Whats the Features? テストの出力Introduction ● Whats FeaturesHow to use ● Test LogConclusion ● Test Report ● Progress Display 12/02/11 Boost.勉強会 #8 大阪 95
  96. 96. 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
  97. 97. Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 97
  98. 98. 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
  99. 99. Whats the Features? 実行時のテスト設定Introduction ● Whats 環境変数、あるいは実行時引数でロ Features ● グ出力の挙動を設定するHow to useConclusion ● log_format ● log_level ● output_format ● random ● report_format 12/02/11 Boost.勉強会 #8 大阪 99
  100. 100. 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
  101. 101. Whats the Features?Introduction Whats ● Unit Test Frameworkの機能 FeaturesHow to use ● Usage VariantConclusion ● テストランナー ● モジュール初期化関数 ● テストの作成と組織化 ● Fixture ● テストの出力 ● 実行時のテスト設定 ● Testing tools 12/02/11 Boost.勉強会 #8 大阪 101
  102. 102. Whats the Features? Testing toolsIntroduction ● Whats Minimal Testing Facilityの例で使 Features ● 用したBOOST_CHECKなどHow to useConclusion 12/02/11 Boost.勉強会 #8 大阪 102
  103. 103. Whats the Features? Testing toolsIntroduction ● Whats 複数のマクロと関数宣言からなる Features ● ツール集。How to useConclusion ● テストの作成と管理を容易にして、 統一的なエラーレポーティングの仕 組みを提供する。 ● 全てのツールは自動的にエラーレ ポーティングにエラーの位置情報 (ファイル名と行番号) 12/02/11 Boost.勉強会 #8 大阪 103
  104. 104. Whats the Features? Testing tools flavorsIntroduction ● Whats 全てのテストツールにはflavorsが提 Features ● 供されているHow to useConclusion ● テストツールのアサーションについ てのレベル的なもの 12/02/11 Boost.勉強会 #8 大阪 104
  105. 105. Whats the Features? Testing tools flavorsIntroduction ● Whats WARN Features ●How to useConclusion ● 警告 ● エラーカウント:そのまま ● テストの実行:継続 12/02/11 Boost.勉強会 #8 大阪 105
  106. 106. Whats the Features? Testing tools flavorsIntroduction ● Whats CHECK Features ●How to useConclusion ● エラーチェック ● エラーカウント:増加 ● テストの実行:継続 12/02/11 Boost.勉強会 #8 大阪 106
  107. 107. Whats the Features? Testing tools flavorsIntroduction ● Whats REQUIRE Features ●How to useConclusion ● 必要条件チェック ● エラーカウント:増加 ● テストの実行:中断 12/02/11 Boost.勉強会 #8 大阪 107
  108. 108. 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
  109. 109. 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
  110. 110. Whats the Features? 提供されているTesting toolsIntroduction ● Whats などなど・・・ Features ●How to useConclusion ● 詳しくはドキュメントに書いてあり ます。 12/02/11 Boost.勉強会 #8 大阪 110
  111. 111. Whats the Features? 提供されているTesting toolsIntroduction ● Whats Testing toolsを使うことでテストの Features ● 意味を分かりやすく書くことがでHow to useConclusion き、さらに統一的なエラーレポー ティングができるようになる。 12/02/11 Boost.勉強会 #8 大阪 111
  112. 112. How to use the Boost.Test12/02/11 Boost.勉強会 #8 大阪 112
  113. 113. How to use the Boost.Test デモIntroduction ● Whats FeaturesHow to useConclusion 12/02/11 Boost.勉強会 #8 大阪 113
  114. 114. Conclusion12/02/11 Boost.勉強会 #8 大阪 114
  115. 115. ConclusionIntroduction Whats ● Boost.Testを使うことで、C++のテ Features ストを自動的に組織しながらテストHow to useConclusion を書くことができる。 ● 実行時引数を設定することで、柔軟 にテストをすることができる。 ● Testing toolsを使うことでテスト内 容を明確にすることができる。 ● (Boostに含まれてるので)普段から Boostを使っている人は導入しやす い。 12/02/11 Boost.勉強会 #8 大阪 115
  116. 116. Conclusion 欠点Introduction ● Whats 実行時にスキップするテストを選ぶ Features ● ことが出来ないHow to useConclusion ● Mockの仕組みがない ● テスト出力のストリームがワイド文 字列対応していない 12/02/11 Boost.勉強会 #8 大阪 116
  117. 117. Conclusion 欠点Introduction ● Whats 実行時にスキップするテストを選ぶ Features ● ことが出来ないHow to useConclusion ● Mockの仕組みがない ● テスト出力のストリームがワイド文 字列対応していない 12/02/11 Boost.勉強会 #8 大阪 117
  118. 118. ConclusionIntroduction Whats ● Mockの仕組みがない Features http://alexott.net/en/cpp/CppTestingIntro.htmlHow to useConclusion ● ここにGoogle MockとBoost.Testを 組み合わせたテストの紹介がありま す。 12/02/11 Boost.勉強会 #8 大阪 118
  119. 119. 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
  120. 120. 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
  121. 121. Conclusion 質問など・・・Introduction ● Whats FeaturesHow to useConclusion 12/02/11 Boost.勉強会 #8 大阪 121
  122. 122. Thank You! ありがとうございました!12/02/11 Boost.勉強会 #8 大阪 122

×