Your SlideShare is downloading. ×
FlexUnit4とMockitoFlex
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

FlexUnit4とMockitoFlex

2,645
views

Published on

FlexUnit4でMockitoを使う方法です。fxug@北陸in富山の発表資料

FlexUnit4でMockitoを使う方法です。fxug@北陸in富山の発表資料

Published in: Technology

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,645
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. MockitoとFlexUnit4 @hikaruworld
  • 2. MockitoとFlexUnit4 @hikaruworld
  • 3. おわび
  • 4. ずいぶんと間が空いてしまってすみません。
  • 5. 本日のお題 Mockitoについて話します
  • 6. 本日のてー楽なテスト生活。
  • 7. 動機付け1. テストめんどいよ(Java)2. 既存のMockライブラリきもい(Java)3. いちいち面倒(Java)4. 2011年元旦 ---> Mockito(Java)に出会う5. 惚れる6. Flex版もあるらしい。7. じゃあMockito広めておくか(Javaの)
  • 8. 動機付け1. テストめんどいよ(Java)2. 既存のMockライブラリきもい(Java)3. いちいち面倒(Java)4. 2011年元旦 ---> Mockito(Java)に出会う5. 惚れる6. Flex版もあるらしい。7. じゃあMockito広めておくか(Flexの)
  • 9. 突然ですが
  • 10. 最近Flex界隈でもDIコンテナが流行っているような。流行っているような
  • 11. なんでDI?
  • 12. メリットやっぱテストだよね。
  • 13. 依存関係がなくなる ↓ テストしやすい ↓ クリーンなコード
  • 14. 問題点インターフェイスをどう偽装するか。
  • 15. Mock or Stub
  • 16. Mock能動的振る舞いを定義する
  • 17. 受動的値の検証をしない。毎回一定の値を返す Stub
  • 18. というわけで、Mockit-Flex
  • 19. テスティングフレームワーク
  • 20. モッキングフレームワーク
  • 21. ASMockaz-Mockと呼びます。エーエスモックではありません。モッキングライブラリ個人的になんかイヤ。メソッドとか。
  • 22. コラム Floxy http://code.google.com/p/floxy/ Flemit http://code.google.com/p/flemit/動的処理用のライブラリ。Floxyはプロキシ生成、Flemitはバイナリ生成。ソース読みづらいョ。
  • 23. Mockito-FlexとはMockit(Java)のFlex版基本的な機能は同じMIT License内部実装はASMock(1.0rc1)によって実装現在開発中(最近停滞気味?)
  • 24. 利用可能な テスティグフレームワークFlexUnit4FlexUnit1AsUnit4fluint
  • 25. 利用可能な テスティグフレームワークFlexUnit4FlexUnit1AsUnit4fluint
  • 26. FlexUnit4ティステングフレームワークAdobe謹製最新版は4.1Beta1Junitライクな利用方法現在進化中(rev.21083) JUnitライクに強化中(進化早いよ...)
  • 27. 注意事項FlashBuilder4を利用する場合付属しているFlexUnit4が古い通常のリリース版でも古し。楽したいならtrunk推奨。ドキュメントはほとんどありません...
  • 28. 事前準備ソースをダウンロードすべしhg clone https://bitbucket.org/ loomis/mockito-flexASDoc作成すべしasdoc -source-path ./main/flex/ -doc-sources ./main/flex/ -library-path ../libs/
  • 29. ドキュメント(nyリリースノートくらい...ASDocを見るべしソースを見るべしテストコードを見るべし
  • 30. ドキュメント(nyリリースノートくらい...ASDocを見るべしソースを見るべしテストコードを見るべしま、正式版じゃないしね。
  • 31. 以下本題
  • 32. 1. インストール2. 初期設定3. Mock化(ふるまいの偽装)4. Mockの実行5. Mockの検証6. おまけ
  • 33. 1. インストール2. 初期設定3. Mock化(ふるまいの偽装)4. Mockの実行5. Mockの検証6. おまけ
  • 34. インストールmockito-1.4M4.swcをlibs以下に
  • 35. 1. インストール2. 初期設定3. Mock化(ふるまいの偽装)4. Mockの実行5. Mockの検証6. おまけ
  • 36. /** * [RunWith]でMockitoClassRunnerを指定 */[RunWith("org.mockito.integrations. flexunit4.MockitoClassRunner")]public class MainTest{ /** Mock化対象のクラスを定義 */ [Mock(type="com.wordpress.prepro.Main")] public var target:Main;
  • 37. 実はこの設定は古いです。
  • 38. 初期設定(改) [Rule]
  • 39. コラムFlexUnit4が提供する[Rule]
  • 40. 基本はJUnitの@Ruleに同じ
  • 41. /* [Rule]でMockitoRuleをインスタンス化 */[Rule]public var mockitoRule:IMethodRule = new MockitoRule(); /** Mock化対象クラスの宣言 */[Mock(type=" com.wordpress.prepro.Main")]public var mockie:Main;
  • 42. 補足:コンストラクタ引数[Mock(type="com.wordpress.prepro.Main", argsList="args")]/** Mockに渡すコンストラクタ引数を指定 */public var args:Array = [1];
  • 43. 初期設定(改2)[Rule]public var mockitoRule:IMethodRule = newMockitoRule(); [Test] public function test():void {// mock()でmock化 this.target = mock(Main); }
  • 44. 補足:コンストラクタ引数var args = [1,2]; this.target = mock( Main,"mockies", args);
  • 45. 1. インストール2. 初期設定3. Mock化(ふるまいの偽装)4. Mockの実行5. Mockの検証6. おまけ
  • 46. Mock化given
  • 47. given( Mock対象クラスとメソッド ).willReturn( 戻り値 );
  • 48. コラムMockito(java)とMockito(Flex)のメソッドの違い
  • 49. コラムMockito(java)とMockito(Flex)のメソッドの違いwhen.thenReturn => given.willReturn
  • 50. コラムMockito(java)とMockito(Flex)のメソッドの違いwhen.thenReturn => given.willRetunBDDMockito側のインターフェイス
  • 51. コラムMockito(java)にできて,Mockito(Flex)に出来ないこと
  • 52. コラムgiven(hoge.piyo()).willReturn(1);given(hoge.piyo()).willReturn(2);given(hoge.piyo()).willReturn(3);
  • 53. コラムgiven(hoge.piyo()) .willReturn(1); .willReturn(2); .willReturn(3);
  • 54. コラムgiven(hoge.piyo()).willReturn(1);given(hoge.piyo()).willReturn(2);given(hoge.piyo()).willReturn(3);すべて1が返されるため、複数呼び出しに未対応!!
  • 55. 回避策Answerを利用
  • 56. カスタムAnswerを作成するclass SequenceAnswer implements Answer{ private var sequence:Array; public function SequenceAnswer(sequence:Array) { this.sequence = sequence; } public function give():* { return sequence.shift(); }
  • 57. テストコードgiven(hoge.piyo()) .will(new SequenceAnswer( "a", "b", "c"));
  • 58. 引数に設定可能なMockanyanyof(Class)havingPropertyOf(property, value)isItNaNnotNull
  • 59. 使い方given(hoge.piyo(any()) .willReturn(1);
  • 60. willXX willReturn willThrow will
  • 61. will() callOriginal useArgument argThat
  • 62. 1. インストール2. 初期設定3. Mock化(ふるまいの偽装)4. Mockの実行5. Mockの検証6. おまけ
  • 63. Mockの実行特に設定は不要
  • 64. 1. インストール2. 初期設定3. Mock化(ふるまいの偽装)4. Mockの実行5. Mockの検証6. おまけ
  • 65. Mockの検証 verify
  • 66. verify( 実行回数の指定など ).that( 戻り値 );
  • 67. 指定可能な設定atLatestbetweeneqnevernotMoreThantimes
  • 68. 使い方verify(never()).that(hoge.piyo);
  • 69. 1. インストール2. 初期設定3. Mock化(ふるまいの偽装)4. Mockの実行5. Mockの検証6. おまけ
  • 70. 全体の構成
  • 71. 初期化 ↓given ↓when ↓ then
  • 72. public class MainTest { [Rule] public var mockitoRule:IMethodRule = new MockitoRule(); [Mock(type="com.wordpress.prepro.Main")] public var mockie:Main; [Test] public function any_is_not_null:void() { given(mockie.say(any()).willReturn("piyo"); var result:String = target.say("abc"); verify().that(target.say(any()); assertThat(result, isA("piyo")); }}
  • 73. つぎはどこへ? DIコンテナの話してないな... ビルドツールの適用 CIの導入 etc...
  • 74. 心地よいMock生活を。