こんにちは。きんくまです。
FlexUnitを使ってテストしててうまくいかないことがありましたのでその話です。
Flexunitでテストデータをまとめて用意したいときは、ドキュメントによるとParameterizedの機能を使うといいみたいです。
>> FlexUnit Parameterized Test Styles
結果は正しく出るのだけど、(下の画面。いまはテストが全て成功しているんですが、テストが失敗したときのことです)
失敗したテストの詳細を表示する部分に、何も表示されない現象が起きてしまい、困っていました。
どんなコードだったかというとこんな感じで、各テストデータの第一引数にJSONの文字列が入っていました。
package flexUnitTests { import org.flexunit.runners.Parameterized; [RunWith("org.flexunit.runners.Parameterized")] public class MyTestNGTest { private var foo:Parameterized; public static var testDataA:Array = [ ['{"app":"App1", "ver":"1.0.1"}', 10000] ,['{"app":"App2", "ver":"2.0.1"}', 1000] ]; [Test(dataProvider="testDataA")] public function testA(jsonStr:String, price:int):void{ //ここに非同期処理が走り、そのイベント先でMockolateのスタブを使っていた } } }
で、散々時間をつかってあれこれ試した結果、第一引数のJSON文字列が悪さをしていたのか、別の普通の文字列をいれたらうまく動きました。
(JSON文字列は第二引数にスライド)
今回はどういうテストデータなのかを知らせるタイトルをいれました。こんな具合です。
package flexUnitTests { import org.flexunit.runners.Parameterized; [RunWith("org.flexunit.runners.Parameterized")] public class MyTestNGTest { private var foo:Parameterized; public static var testDataA:Array = [ ["10000円のとき", '{"app":"App1", "ver":"1.0.1"}', 10000] ,["1000円のとき", '{"app":"App2", "ver":"2.0.1"}', 1000] ]; [Test(dataProvider="testDataA")] public function testA(title:String, jsonStr:String, price:int):void{ //ここに非同期処理が走り、そのイベント先でMockolateのスタブを使っていた } } }
なんでなのかはわかりませんが、これで失敗したテストの詳細が表示されるようになりました。
第一引数に複雑な文字列をいれちゃうといけないかもしれないです。
でもひょっとしたら、それだけじゃならなくて、コードにも書いてある通り、非同期処理やMockolateというモックライブラリの組み合わせでなってしまったのかもしれないです。
■ 自作iPhoneアプリ 好評発売中!
・フォルメモ - シンプルなフォルダつきメモ帳
・ジッピー電卓 - 消費税や割引もサクサク計算!
■ LINEスタンプ作りました!
毎日使える。とぼけたウサギ