4

似乎大多数 XUnit 测试框架在您想要断言给定操作将引发异常(或 AS3 术语中的错误)时提供断言。是否有一些我忽略的“标准”方法来执行此操作,其中可以解释 FlexUnit 中缺少 assertError() 断言吗?

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

有人对此有想法吗?

4

3 回答 3

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;
}
于 2009-03-03T16:38:59.877 回答
1

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

于 2010-05-10T08:37:53.127 回答
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();

玩得开心 :)

于 2013-03-19T19:05:59.793 回答