为什么FlexUnit中没有assertError()函数?

时间:2009-03-03 16:32:59

标签: flex actionscript-3 error-handling assertions flexunit

似乎大多数XUnit测试框架都提供了断言,当你想断言给定的操作会抛出异常时(或AS3用语中的错误)。是否有一些“标准”的方法来做到这一点我是忽略,这可以解释FlexUnit中是否缺少assertError()断言?

我知道如何实现这样的事情,我可能会把它添加到我的FlexUnit(开源!),但似乎是一个明显的遗漏,我想知道我是不是做错了

有人对此有什么看法吗?

3 个答案:

答案 0 :(得分:5)

编辑05/02/2010:我现在建议您使用FlexUnit 4。它使用可扩展的元数据系统,支持预期的异常,并且还支持在不使用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 :(得分:1)

FlexUnit 4与hamcrest-as3配合得很好。 hamcrest有错误断言匹配器

答案 2 :(得分: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();

玩得开心:)