似乎大多数XUnit测试框架都会在需要断言给定操作将引发异常(或AS3用语中的Error)时提供断言。我是否忽略了某些“标准”的方法来做到这一点?会解释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;
}

08-28 14:59