FlexUnitで例外のテストをしたい
例外がthrowされるかテストする場合、以下のように書けばいいと思っていました。
try { obj.throwFunc(); // テストするメソッド fail(); } catch (e:Error) { }
throwFunc()実行時に例外がthrowされればcatchブロックへ飛ばされてfail()が実行されずテスト成功となる寸法です。しかし実際はthrowFunc()が例外をthrowしない場合もテスト成功となってしまいます...。どうやらテスト失敗を検知するために、FlexUnitのメソッド事態何かしらの例外を発生させているようです。このロジックではテストできません。
日本語で情報を見つけられませんでした。
FlexAbility » Blog Archive » An assertError() Method For FlexUnit
こちらで何やらいろんな方法が書かれています。英語なので途中何が書かれているのやらさっぱりです。要はtryブロック内でfail()を実行してもテスト失敗を検知できないということですね。fail()が実行されたとき、flexunit.framework.AssertionFailedErrorがthrowされるようです。
これらを踏まえて例外がthrowされる仕様のメソッドのテストコードを考えてみました。
try { obj.throwFunc(); // テストするメソッド fail(); } catch (e:AssertionFailedError) { fail(); } catch (e:Error) { }
これで、throwFunc()が例外をthrowした場合テスト成功、throwされなければテスト失敗になります。しかしfail()を2回呼ぶとか二度手間ですね...。
FlexUnitの例外のテストコードの定石ってなんかあるんですかね。