書き物

技術とか作った物の話とか愚痴文句感想など

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の例外のテストコードの定石ってなんかあるんですかね。