2009-03-03 86 views
4

似乎大多數XUnit測試框架提供了斷言的時候,當你想斷言給定的操作將拋出一個異常(或在AS3的說法錯誤。)是否有一些「標準」的方式做到這一點,我俯瞰,這將解釋FlexUnit中包含的assertError()斷言的缺失?爲什麼FlexUnit中沒有assertError()函數?

我知道如何實現這樣的事情,我可能會將它添加到我的FlexUnit(去開源!),但它似乎是這樣一個明顯的遺漏,我只是想知道我是否只是做它錯誤。

任何人都有這個想法?

回答

5

編輯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; 
} 
1

FlexUnit 4分中的隊友很好地hamcrest-AS3。 hamcrest有錯誤斷言匹配器

0

你可能想要考慮使用這個斷言工具。

它不替代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(); 

玩得開心:)

相關問題