似乎大多数 XUnit 测试框架在您想要断言给定操作将引发异常(或 AS3 术语中的错误)时提供断言。是否有一些我忽略的“标准”方法来执行此操作,其中可以解释 FlexUnit 中缺少 assertError() 断言吗?
我知道如何实现这样的事情,我可能会将它添加到我的 FlexUnit(去开源!),但这似乎是一个明显的遗漏,我不知道我是否只是做错了。
有人对此有想法吗?
似乎大多数 XUnit 测试框架在您想要断言给定操作将引发异常(或 AS3 术语中的错误)时提供断言。是否有一些我忽略的“标准”方法来执行此操作,其中可以解释 FlexUnit 中缺少 assertError() 断言吗?
我知道如何实现这样的事情,我可能会将它添加到我的 FlexUnit(去开源!),但这似乎是一个明显的遗漏,我不知道我是否只是做错了。
有人对此有想法吗?
编辑 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;
}
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();
玩得开心 :)