FlexUnitにassertError()関数がないのはなぜですか?
-
03-07-2019 - |
質問
ほとんどのXUnitテストフレームワークは、特定の操作が例外(またはAS3用語ではエラー)をスローすることをアサートしたい場合にアサーションを提供するようです。私が見落としているこれを行う方法は、FlexUnitに含まれるassertError()アサーションがないことを説明しますか?
そのようなことを実装する方法を知っています。おそらくFlexUnitに追加します(オープンソースになります!) 。
誰もこれについて考えていますか?
解決
2010年5月2日編集: FlexUnit 4 を使用することをお勧めします。拡張可能なmetdataシステムを使用し、予期される例外をサポートし、AIRを使用せずに統合サーバー環境で実行することもサポートします。
編集: fluint をご覧ください。 、これは十分なFlexUnitを持っている人々によって構築されたもので、制限があります。これらの種類のアサーションの一部が組み込まれている場合があります。
まったく同意します。実際、FlexUnitにはいくつかの便利なメソッド(assertEvent、asserArrayEqualsなど)がありません。私はあなたがそれを実装する方法を知っていると言ったのを知っていますが、私を自由に使ってください:
public static function assertError(message : String, func : Function, errorClass : Class = null, errorMessage : String = null, errorCodes : Array = null) : Error
{
_assertionsMade++;
if (errorClass == null) errorClass = Error;
try
{
func();
}
catch(ex : Error)
{
if (!(ex is errorClass))
{
fail("Expected error of type '" + getQualifiedClassName(errorClass) + "' but was '" + getQualifiedClassName(ex) + "'");
}
if (errorMessage != null && ex.message != errorMessage)
{
fail("Expected error with message '" + errorMessage + "' but was '" + ex.message + "'");
}
if (errorCodes != null && errorCodes.indexOf(ex.errorID) == -1)
{
fail("Expected error with errorID '" + errorCodes.join(" or ") + "' but was '" + ex.errorID + "'");
}
return ex;
}
if (message == null)
{
message = "Expected error of type '" + getQualifiedClassName(errorClass) + "' but none was thrown"
}
fail(message);
return null;
}
他のヒント
FlexUnit 4はhamcrest-as3とよく合致します。 hamcrestにはエラーアサーションマッチャーがあります
このアサーションツールの使用を検討できます。
これはxxxunitフレームワークに置き換わるものではなく、アサーションを容易にするだけで、より英語でコードを少なくします。
https://github.com/osher/should.as
var p:Person = new Person();
//assume a method p.sayHi()
p.sayHi.should().throwError('name is not set');
p.name = "Radagast";
p.sayHi.should().not.throwError();
楽しんでください:)