似乎大多數XUnit測試框架提供了斷言的時候,當你想斷言給定的操作將拋出一個異常(或在AS3的說法錯誤。)是否有一些「標準」的方式做到這一點,我俯瞰,這將解釋FlexUnit中包含的assertError()斷言的缺失?爲什麼FlexUnit中沒有assertError()函數?
我知道如何實現這樣的事情,我可能會將它添加到我的FlexUnit(去開源!),但它似乎是這樣一個明顯的遺漏,我只是想知道我是否只是做它錯誤。
任何人都有這個想法?
似乎大多數XUnit測試框架提供了斷言的時候,當你想斷言給定的操作將拋出一個異常(或在AS3的說法錯誤。)是否有一些「標準」的方式做到這一點,我俯瞰,這將解釋FlexUnit中包含的assertError()斷言的缺失?爲什麼FlexUnit中沒有assertError()函數?
我知道如何實現這樣的事情,我可能會將它添加到我的FlexUnit(去開源!),但它似乎是這樣一個明顯的遺漏,我只是想知道我是否只是做它錯誤。
任何人都有這個想法?
編輯05/02/2010:我現在推薦使用FlexUnit 4。它使用可擴展的metdata系統,支持預期的異常,並且還支持在不使用AIR的情況下在集成服務器環境中運行。
編輯:你應該看看fluint,這是由誰有足夠的FlexUnit和它的限制的人建立。它可能有一些內置的這些類型的斷言。
我完全同意。實際上,FlexUnit缺少一些有用的方法(assertEvent,assertArrayEquals等)。我知道你說你知道如何實現它,而是隨意使用地雷:
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();
玩得開心:)