rspecpiccolo gem

29
RSpecPiccolo Gem RSpecPiccolo Gem について について Presented by @tbpgr

Upload: tbpgr

Post on 30-Jun-2015

302 views

Category:

Technology


7 download

DESCRIPTION

About Ruby gem library "RSpecPiccolo gem"

TRANSCRIPT

Page 1: RSpecPiccolo gem

RSpecPiccolo GemRSpecPiccolo Gem についてについて

Presented by @tbpgr

Page 2: RSpecPiccolo gem

目次目次● エレベーターピッチ● ケース 1 インスタンスメソッドのテスト● ケース 2 クラスメソッドのテスト● ケース 3 プロダクトコードのひな形も同時に作成● 導入方法● 得したこと

Page 3: RSpecPiccolo gem

エレベーターピッチエレベーターピッチ

Page 4: RSpecPiccolo gem

エレベーターピッチエレベーターピッチ● RSpecPiccolo って何?

Page 5: RSpecPiccolo gem

エレベーターピッチエレベーターピッチ● RSpecPiccolo って何?● テストを楽に作りたい

Page 6: RSpecPiccolo gem

エレベーターピッチエレベーターピッチ● RSpecPiccolo って何?● テストを楽に作りたい● Ruby 開発者向けの

Page 7: RSpecPiccolo gem

エレベーターピッチエレベーターピッチ● RSpecPiccolo って何?● テストを楽に作りたい● Ruby 開発者向けの● RSpecPiccolo という gem は

Page 8: RSpecPiccolo gem

エレベーターピッチエレベーターピッチ● RSpecPiccolo って何?● テストを楽に作りたい● Ruby 開発者向けの● RSpecPiccolo という gem は● テストコード生成ツールです

Page 9: RSpecPiccolo gem

エレベーターピッチエレベーターピッチ● RSpecPiccolo って何?● テストを楽に作りたい● Ruby 開発者向けの● RSpecPiccolo という gem は● テストコード生成ツールです● これはパラメータ化テストのテンプレートを出力でき

Page 10: RSpecPiccolo gem

エレベーターピッチエレベーターピッチ● RSpecPiccolo って何?● テストを楽に作りたい● Ruby 開発者向けの● RSpecPiccolo という gem は● テストコード生成ツールです● これはパラメータ化テストのテンプレートを出力でき● 手動作成と違って

Page 11: RSpecPiccolo gem

エレベーターピッチエレベーターピッチ● RSpecPiccolo って何?● テストを楽に作りたい● Ruby 開発者向けの● RSpecPiccolo という gem は● テストコード生成ツールです● これはパラメータ化テストのテンプレートを出力でき● 手動作成と違って● ボイラーテンプレートの出力機能が備わっている

Page 12: RSpecPiccolo gem

ケースケース 1 1 インスタンスメソッドのテストインスタンスメソッドのテスト

Page 13: RSpecPiccolo gem

ケースケース 1 1 インスタンスメソッドのテストインスタンスメソッドのテスト

● コンソールで piccolo コマンドを実行

● 第 1 引数はモジュール名+クラス名

● 第 2 引数はファイル名

● 第 3 引数以降はメソッド名(必要な数分)

piccolo e Hoge::Core hoge_core hoge hige hage

Page 14: RSpecPiccolo gem

ケースケース 1 1 インスタンスメソッドのテストインスタンスメソッドのテスト

● 出力結果は・・・

Page 15: RSpecPiccolo gem

ケースケース 1 1 インスタンスメソッドのテストインスタンスメソッドのテスト● require,テストケースのリスト部● describe はモジュール名+クラス名。 contextはメソッド名が自動で設定されている● テストケースは 1ケース 1ハッシュで管理。必要なパラメータは手動で追加

Page 16: RSpecPiccolo gem

ケースケース 1 1 インスタンスメソッドのテストインスタンスメソッドのテスト● テスト本体はテストケースのリスト分ループする構造になっている● 1つのメソッドは1つのテストケースで管理する● case_before, base_afterはcaseごとの初期化・終了処理● context全体の初期化、終了はRSpecのbefore,afterを利用すればよい● テストに必要となるインスタンスの取得、メソッドの実行、検証コードのひな形が予め出力されている

Page 17: RSpecPiccolo gem

ケースケース 1 1 インスタンスメソッドのテストインスタンスメソッドのテスト● case_before にケースごとの初期化処理を記述● case_after にケースごとの終了処理を記述

Page 18: RSpecPiccolo gem

ケースケース 1 1 インスタンスメソッドのテストインスタンスメソッドのテスト

● 同様の構造でメソッド数分テストコードが生成されている

Page 19: RSpecPiccolo gem

ケースケース 2 2 クラスメソッドのテストクラスメソッドのテスト

Page 20: RSpecPiccolo gem

ケースケース 2 2 クラスメソッドのテストクラスメソッドのテスト

● コンソールで piccolo コマンドを実行。

● 第 1 引数はモジュール名+クラス名

● 第 2 引数はファイル名

● 第 3 引数以降はメソッド名+ @c (必要な数分)

● インスタンスメソッドとの併用も可能

piccolo e Hoge::Core hoge_core hoge@c

Page 21: RSpecPiccolo gem

ケースケース 2 2 クラスメソッドのテストクラスメソッドのテスト

● 出力結果は・・・

Page 22: RSpecPiccolo gem

ケースケース 2 2 クラスメソッドのテストクラスメソッドのテスト● インスタンスメソッドと同じ出力内容の箇所は説明省略

● インスタンスの取得の代わりにクラスメソッドを直接呼び出すコードが生成されている。

Page 23: RSpecPiccolo gem

ケースケース 33 プロダクトコードのひな形も同時に作成プロダクトコードのひな形も同時に作成

Page 24: RSpecPiccolo gem

ケースケース 33 プロダクトコードのひな形も同時に作成プロダクトコードのひな形も同時に作成

● コンソールで piccolo コマンドを実行。

● 第 1 引数はモジュール名+クラス名

● 第 2 引数はファイル名

● 第 3 引数以降はメソッド名または属性

※ クラスメソッドは @c, 属性は @f で指定可能

● 属性はコンストラクタからの値設定コードつき

piccolo e Hoge::Core hoge_core class_method@c instance_method attr1@f attr2@f -p

Page 25: RSpecPiccolo gem

ケースケース 33 プロダクトコードのひな形も同時に作成プロダクトコードのひな形も同時に作成

● 出力結果は・・・

Page 26: RSpecPiccolo gem

ケースケース 33 プロダクトコードのひな形も同時に作成プロダクトコードのひな形も同時に作成● テストコードについては説明省略

● プロダクトコードのひな形が lib 配下に出力される

● attr_accessor_init は TbpgrUtils gem で提供しているフィールド定義+ initialize 定義を一括で行うクラスマクロ。 AttributesInitializable を include することで利用可能。

Page 27: RSpecPiccolo gem

導入導入● Bundler 利用時

Gemfile に『 gem 'rspec_piccolo' 』を記述して bundle を実行● gem install 利用時

gem install rspec_piccolo を実行● その他、より詳細な利用方法については GitHub 参照

https://github.com/tbpgr/rspec_piccolo

Gem については下記参照

http://rubygems.org/gems/rspec_piccolo

Page 28: RSpecPiccolo gem

補足補足● もし生成されるコードの設計や記法等が好みではない場合は、アイデアだけ流用して自分好み

の RSpecPiccolo 代替 gemを作成・公開してはいかがでしょうか?● Piccolo はピッ○ロ大○王のイメージです。

「ポコペンポコペンダーレガツツイタ・・・う、うごっ。」と魔族の卵のごとくテストコードを生成しているイメージ。

● 俺は MiniTest派だ、という方はぜひ MiniTestMajunior gem を。● Ruby使い以外の方も同様の観点でツールを作成してみるのはいかがでしょうか?私はJavaの

プロジェクトで RSpecPiccolo のJUnit版とも言えるツールを作成して実プロジェクトで活用したことがあります。

当時はJavaの CLIツールとして作成しましたが、もし今作るなら Groovyで Gradleのタスクとして作るだろうと思います。必要にかられていないので作りませんけど。

Page 29: RSpecPiccolo gem

Thank you!!Thank you!!

● Author: @tbpgr● Twitter: @tbpgr● Blog: http://d.hatena.ne.jp/tbpg/● GitHub: https://github.com/tbpgr● RubyGems: http://rubygems.org/profiles/tbpgr