MockitoとFlexUnit4           @hikaruworld
MockitoとFlexUnit4           @hikaruworld
おわび
ずいぶんと間が空いてしまってすみません。
本日のお題  Mockitoについて話します
本日のてー楽なテスト生活。
動機付け1.   テストめんどいよ(Java)2.   既存のMockライブラリきもい(Java)3.   いちいち面倒(Java)4.   2011年元旦 ---> Mockito(Java)に出会う5.   惚れる6.   Flex版もある...
動機付け1.   テストめんどいよ(Java)2.   既存のMockライブラリきもい(Java)3.   いちいち面倒(Java)4.   2011年元旦 ---> Mockito(Java)に出会う5.   惚れる6.   Flex版もある...
突然ですが
最近Flex界隈でもDIコンテナが流行っているような。流行っているような
なんでDI?
メリットやっぱテストだよね。
依存関係がなくなる     ↓ テストしやすい     ↓ クリーンなコード
問題点インターフェイスをどう偽装するか。
Mock       or            Stub
Mock能動的振る舞いを定義する
受動的値の検証をしない。毎回一定の値を返す            Stub
というわけで、Mockit-Flex
テスティングフレームワーク
モッキングフレームワーク
ASMockaz-Mockと呼びます。エーエスモックではありません。モッキングライブラリ個人的になんかイヤ。メソッドとか。
コラム  Floxy    http://code.google.com/p/floxy/  Flemit    http://code.google.com/p/flemit/動的処理用のライブラリ。Floxyはプロキシ生成、Flemitはバ...
Mockito-FlexとはMockit(Java)のFlex版基本的な機能は同じMIT License内部実装はASMock(1.0rc1)によって実装現在開発中(最近停滞気味?)
利用可能な         テスティグフレームワークFlexUnit4FlexUnit1AsUnit4fluint
利用可能な         テスティグフレームワークFlexUnit4FlexUnit1AsUnit4fluint
FlexUnit4ティステングフレームワークAdobe謹製最新版は4.1Beta1Junitライクな利用方法現在進化中(rev.21083) JUnitライクに強化中(進化早いよ...)
注意事項FlashBuilder4を利用する場合付属しているFlexUnit4が古い通常のリリース版でも古し。楽したいならtrunk推奨。ドキュメントはほとんどありません...
事前準備ソースをダウンロードすべしhg clone https://bitbucket.org/     loomis/mockito-flexASDoc作成すべしasdoc -source-path ./main/flex/ -doc-sou...
ドキュメント(nyリリースノートくらい...ASDocを見るべしソースを見るべしテストコードを見るべし
ドキュメント(nyリリースノートくらい...ASDocを見るべしソースを見るべしテストコードを見るべしま、正式版じゃないしね。
以下本題
1. インストール2. 初期設定3. Mock化(ふるまいの偽装)4. Mockの実行5. Mockの検証6. おまけ
1. インストール2. 初期設定3. Mock化(ふるまいの偽装)4. Mockの実行5. Mockの検証6. おまけ
インストールmockito-1.4M4.swcをlibs以下に
1. インストール2. 初期設定3. Mock化(ふるまいの偽装)4. Mockの実行5. Mockの検証6. おまけ
/** * [RunWith]でMockitoClassRunnerを指定 */[RunWith("org.mockito.integrations.         flexunit4.MockitoClassRunner")]public ...
実はこの設定は古いです。
初期設定(改) [Rule]
コラムFlexUnit4が提供する[Rule]
基本はJUnitの@Ruleに同じ
/* [Rule]でMockitoRuleをインスタンス化 */[Rule]public var mockitoRule:IMethodRule     = new MockitoRule(); /** Mock化対象クラスの宣言 */[Moc...
補足:コンストラクタ引数[Mock(type="com.wordpress.prepro.Main",  argsList="args")]/** Mockに渡すコンストラクタ引数を指定 */public var args:Array = [1];
初期設定(改2)[Rule]public var mockitoRule:IMethodRule                      = newMockitoRule(); [Test] public function test():vo...
補足:コンストラクタ引数var args = [1,2]; this.target = mock(     Main,"mockies",     args);
1. インストール2. 初期設定3. Mock化(ふるまいの偽装)4. Mockの実行5. Mockの検証6. おまけ
Mock化given
given(     Mock対象クラスとメソッド     ).willReturn(           戻り値     );
コラムMockito(java)とMockito(Flex)のメソッドの違い
コラムMockito(java)とMockito(Flex)のメソッドの違いwhen.thenReturn => given.willReturn
コラムMockito(java)とMockito(Flex)のメソッドの違いwhen.thenReturn => given.willRetunBDDMockito側のインターフェイス
コラムMockito(java)にできて,Mockito(Flex)に出来ないこと
コラムgiven(hoge.piyo()).willReturn(1);given(hoge.piyo()).willReturn(2);given(hoge.piyo()).willReturn(3);
コラムgiven(hoge.piyo())   .willReturn(1);   .willReturn(2);   .willReturn(3);
コラムgiven(hoge.piyo()).willReturn(1);given(hoge.piyo()).willReturn(2);given(hoge.piyo()).willReturn(3);すべて1が返されるため、複数呼び出しに未...
回避策Answerを利用
カスタムAnswerを作成するclass SequenceAnswer implements Answer{    private var sequence:Array;    public function SequenceAnswer(se...
テストコードgiven(hoge.piyo())   .will(new SequenceAnswer(         "a",         "b",         "c"));
引数に設定可能なMockanyanyof(Class)havingPropertyOf(property, value)isItNaNnotNull
使い方given(hoge.piyo(any())     .willReturn(1);
willXX  willReturn  willThrow  will
will()  callOriginal  useArgument  argThat
1. インストール2. 初期設定3. Mock化(ふるまいの偽装)4. Mockの実行5. Mockの検証6. おまけ
Mockの実行特に設定は不要
1. インストール2. 初期設定3. Mock化(ふるまいの偽装)4. Mockの実行5. Mockの検証6. おまけ
Mockの検証 verify
verify(      実行回数の指定など      ).that(            戻り値      );
指定可能な設定atLatestbetweeneqnevernotMoreThantimes
使い方verify(never()).that(hoge.piyo);
1. インストール2. 初期設定3. Mock化(ふるまいの偽装)4. Mockの実行5. Mockの検証6. おまけ
全体の構成
初期化   ↓given   ↓when   ↓ then
public class MainTest {  [Rule]  public var mockitoRule:IMethodRule = new MockitoRule();    [Mock(type="com.wordpress.prep...
つぎはどこへ? DIコンテナの話してないな... ビルドツールの適用 CIの導入 etc...
心地よいMock生活を。
FlexUnit4とMockitoFlex
Upcoming SlideShare
Loading in...5
×

FlexUnit4とMockitoFlex

2,801

Published on

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,801
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

FlexUnit4とMockitoFlex

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

×