SlideShare una empresa de Scribd logo
1 de 75
MockitoとFlexUnit4


           @hikaruworld
MockitoとFlexUnit4


           @hikaruworld
おわび
ずいぶんと間が空いてしまってすみません。
本日のお題



  Mockito
について話します
本日のてー


楽なテスト生活。
動機付け

1.   テストめんどいよ(Java)
2.   既存のMockライブラリきもい(Java)
3.   いちいち面倒(Java)
4.   2011年元旦 ---> Mockito(Java)に出会う
5.   惚れる
6.   Flex版もあるらしい。
7.   じゃあMockito広めておくか(Javaの)
動機付け

1.   テストめんどいよ(Java)
2.   既存のMockライブラリきもい(Java)
3.   いちいち面倒(Java)
4.   2011年元旦 ---> Mockito(Java)に出会う
5.   惚れる
6.   Flex版もあるらしい。
7.   じゃあMockito広めておくか(Flexの)
突然ですが
最近Flex界隈でも
DIコンテナが
流行っているような。
流行っているような
なんでDI?
メリット


やっぱテストだよね。
依存関係がなくなる
     ↓
 テストしやすい
     ↓
 クリーンなコード
問題点


インターフェイスを
どう偽装するか。
Mock
       or




            Stub
Mock
能動的
振る舞いを定義する
受動的
値の検証をしない。
毎回一定の値を返す




            Stub
というわけで、Mockit-Flex
テスティング
フレームワーク
モッキング
フレームワーク
ASMock
az-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)によって実装
現在開発中(最近停滞気味?)
利用可能な
         テスティグフレームワーク
FlexUnit4
FlexUnit1
AsUnit4
fluint
利用可能な
         テスティグフレームワーク
FlexUnit4
FlexUnit1
AsUnit4
fluint
FlexUnit4
ティステングフレームワーク
Adobe謹製
最新版は4.1Beta1
Junitライクな利用方法
現在進化中(rev.21083)
 JUnitライクに強化中(進化早いよ...)
注意事項
FlashBuilder4を利用する場合
付属しているFlexUnit4が古い
通常のリリース版でも古し。
楽したいならtrunk推奨。
ドキュメントはほとんどありません...
事前準備

ソースをダウンロードすべし
hg clone https://bitbucket.org/
     loomis/mockito-flex
ASDoc作成すべし
asdoc -source-path ./main/flex/ -
doc-sources ./main/flex/ -library-
path ../libs/
ドキュメント(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 class MainTest
{
  /** Mock化対象のクラスを定義 */
  [Mock(type="com.wordpress.prepro.Main")]
  public var target:Main;
実はこの設定は古いです。
初期設定(改)




 [Rule]
コラム




FlexUnit4が提供する[Rule]
基本はJUnitの
@Ruleに同じ
/* [Rule]でMockitoRuleをインスタンス化 */
[Rule]
public var mockitoRule:IMethodRule
     = new MockitoRule(); /** Mock化対象クラ
スの宣言 */
[Mock(type=" com.wordpress.prepro.Main")]
public var mockie:Main;
補足:コンストラクタ引数


[Mock(type="com.wordpress.prepro.Main",
  argsList="args")]

/** Mockに渡すコンストラクタ引数を指定 */
public var args:Array = [1];
初期設定(改2)
[Rule]
public var mockitoRule:
IMethodRule                      = new
MockitoRule(); [Test] public function test():void {
// mock()でmock化 this.target = mock(Main); }
補足:コンストラクタ引数


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.willRetun

BDDMockito側のインターフェイス
コラム

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(sequence:Array)
    {
       this.sequence = sequence;
    }
  public function give():*
  {
      return sequence.shift();
  }
テストコード

given(hoge.piyo())
   .will(new SequenceAnswer(
         "a",
         "b",
         "c")
);
引数に設定可能なMock

any
anyof(Class)
havingPropertyOf(property, value)
isItNaN
notNull
使い方

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(
            戻り値
      );
指定可能な設定

atLatest
between
eq
never
notMoreThan
times
使い方

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.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"));
    }
}
つぎはどこへ?

 DIコンテナの話してないな...
 ビルドツールの適用
 CIの導入
 etc...
心地よいMock生活を。

Más contenido relacionado

La actualidad más candente

Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyYasuharu Nakano
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんRetrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんYukari Sakurai
 
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみたWindows で PHP をビルドしてみた
Windows で PHP をビルドしてみたy-uti
 
室内空調シミュレーション手順書
室内空調シミュレーション手順書室内空調シミュレーション手順書
室内空調シミュレーション手順書murai1972
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGUehara Junji
 
PHPの今とこれから2016
PHPの今とこれから2016PHPの今とこれから2016
PHPの今とこれから2016Rui Hirokawa
 
AsyncTask アンチパターン
AsyncTask アンチパターンAsyncTask アンチパターン
AsyncTask アンチパターンHiroshi Kurokawa
 
JavaScript.Next Returns
JavaScript.Next ReturnsJavaScript.Next Returns
JavaScript.Next Returnsdynamis
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめYu Nobuoka
 
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門Masashi Umezawa
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試したy-uti
 
PECL operator で演算子オーバーロード
PECL operator で演算子オーバーロードPECL operator で演算子オーバーロード
PECL operator で演算子オーバーロードy-uti
 
SignalRブートキャンプ
SignalRブートキャンプSignalRブートキャンプ
SignalRブートキャンプKouji Matsui
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggugkimukou_26 Kimukou
 
Sd Loader Seasar Con2009 White
Sd Loader Seasar Con2009 WhiteSd Loader Seasar Con2009 White
Sd Loader Seasar Con2009 WhiteAkio Katayama
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみたy-uti
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUehara Junji
 

La actualidad más candente (20)

Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
 
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃんRetrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
Retrofit2 &OkHttp 
でAndroidのHTTP通信が快適だにゃん
 
Windows で PHP をビルドしてみた
Windows で PHP をビルドしてみたWindows で PHP をビルドしてみた
Windows で PHP をビルドしてみた
 
TruffleSqueakの紹介
TruffleSqueakの紹介TruffleSqueakの紹介
TruffleSqueakの紹介
 
室内空調シミュレーション手順書
室内空調シミュレーション手順書室内空調シミュレーション手順書
室内空調シミュレーション手順書
 
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUGGroovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
 
PHPの今とこれから2016
PHPの今とこれから2016PHPの今とこれから2016
PHPの今とこれから2016
 
CruiseControl.NET設置
CruiseControl.NET設置CruiseControl.NET設置
CruiseControl.NET設置
 
AsyncTask アンチパターン
AsyncTask アンチパターンAsyncTask アンチパターン
AsyncTask アンチパターン
 
SubversionServer設置
SubversionServer設置SubversionServer設置
SubversionServer設置
 
JavaScript.Next Returns
JavaScript.Next ReturnsJavaScript.Next Returns
JavaScript.Next Returns
 
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめTypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
 
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試した
 
PECL operator で演算子オーバーロード
PECL operator で演算子オーバーロードPECL operator で演算子オーバーロード
PECL operator で演算子オーバーロード
 
SignalRブートキャンプ
SignalRブートキャンプSignalRブートキャンプ
SignalRブートキャンプ
 
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jgguggriffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
 
Sd Loader Seasar Con2009 White
Sd Loader Seasar Con2009 WhiteSd Loader Seasar Con2009 White
Sd Loader Seasar Con2009 White
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみた
 
Use JWT access-token on Grails REST API
Use JWT access-token on Grails REST APIUse JWT access-token on Grails REST API
Use JWT access-token on Grails REST API
 

Similar a FlexUnit4とMockitoFlex

MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をAtsuhiro Kubo
 
レゴブロックとC#を使ったIoT体験
レゴブロックとC#を使ったIoT体験レゴブロックとC#を使ったIoT体験
レゴブロックとC#を使ったIoT体験Shigeharu Yamaoka
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Takako Miyagawa
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセスMakoto Kato
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Nextdynamis
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会Mugen Fujii
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜JustSystems Corporation
 
tech talk about JS #0
tech talk about JS #0tech talk about JS #0
tech talk about JS #0Hika Maeng
 
Stormの注目の新機能TridentAPI
Stormの注目の新機能TridentAPIStormの注目の新機能TridentAPI
Stormの注目の新機能TridentAPIAdvancedTechNight
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについてtako pons
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にTaku Miyakawa
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -Akio Katayama
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システムTomohiro Ohtake
 
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own datasetYOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own datasetmoto2g
 

Similar a FlexUnit4とMockitoFlex (20)

Spock's world
Spock's worldSpock's world
Spock's world
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
 
Python Autotest pdc2008w
Python Autotest pdc2008wPython Autotest pdc2008w
Python Autotest pdc2008w
 
Gws in fukuoka
Gws in fukuokaGws in fukuoka
Gws in fukuoka
 
レゴブロックとC#を使ったIoT体験
レゴブロックとC#を使ったIoT体験レゴブロックとC#を使ったIoT体験
レゴブロックとC#を使ったIoT体験
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
 
JavaScript.Next
JavaScript.NextJavaScript.Next
JavaScript.Next
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
tech talk about JS #0
tech talk about JS #0tech talk about JS #0
tech talk about JS #0
 
PHP agile test tips
PHP agile test tipsPHP agile test tips
PHP agile test tips
 
Stormの注目の新機能TridentAPI
Stormの注目の新機能TridentAPIStormの注目の新機能TridentAPI
Stormの注目の新機能TridentAPI
 
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
 
Java SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心にJava SE 9の紹介: モジュール・システムを中心に
Java SE 9の紹介: モジュール・システムを中心に
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -FxUG in Toyama - ASphalt2 container -
FxUG in Toyama - ASphalt2 container -
 
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
毎日が憧れの新築、反復可能なデリバリーによる常時新築システム
 
Fab
FabFab
Fab
 
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own datasetYOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
YOLO V3で独自データセットを学習させて物体検出 / Yolo V3 with your own dataset
 

FlexUnit4とMockitoFlex