我正在尝试运行参数化测试...正在尝试实现它,就像它在这里解释的那样: http://docs.flexunit.org/index.php?title=Parameterized_Test_Styles
以下是我的测试用例
import org.flexunit.runners.Parameterized;
[RunWith("org.flexunit.runners.Parameterized")]
public class ArrayBasedStackTests
{
[Paremeters]
public static var stackProvider:Array = [new ArrayBasedStack(), new LinkedListBasedStack()] ;
private var _stack:IStack;
public function ArrayBasedStackTests(param:IStack)
{
_stack = param;
}
[Before]
public function setUp():void
{
}
[After]
public function tearDown():void
{
}
[Test ( description = "Checks isEmpty method of the stack. For empty stack", dataProvider="stackProvider" )]
public function isEmptyStackPositiveTest():void
{
var stack:IStack = _stack;
assertEquals( true, stack.isEmpty() );
}
但是这段代码在初始化错误后抛出:
错误:自定义运行器类org.flexunit.runners.Parameterized应该 链接到项目并实施IRunner。还需要它 一个构造函数,它只接受类,或类和a 助洗剂。
需要帮助解决问题
我已经更新了代码,所以它看起来像这样
[RunWith("org.flexunit.runners.Parameterized")]
public class ArrayBasedStackTests
{
private var foo:Parameterized;
[Parameters]
public static function stacks():Array
{
return [ [new ArrayBasedStack()], [new LinkedListBasedStack()] ] ;
}
[Before]
public function setUp():void
{
}
[After]
public function tearDown():void
{
}
[Test ( description = "Checks isEmpty method of the stack. For empty stack", dataProvider="stacks")]
public function isEmptyStackPositiveTest(stack:IStack):void
{
assertEquals( true, _stack.isEmpty() );
}
有效。但结果有点奇怪。我有4个测试执行而不是2.(我在数据提供程序中有2个项目,因此无法获得为什么我有4个测试)。
输出
答案 0 :(得分:3)
[Parameters]
元数据指定将参数传递给测试的构造函数 - 因此为每个参数调用测试类。您还为特定测试方法设置了dataProvider
,因此每个参数也会调用一次测试方法。两次调用测试和两次调用方法最终运行四次测试。
解决方案是使用[Parameters]
元标记指定要用于整个测试类的数据,或者对每个测试方法使用dataProvider
,但不能同时使用相同的数据同时。
答案 1 :(得分:2)
您缺少对Paramaterized
的静态引用,如下所示:
import org.flexunit.runners.Parameterized;
[RunWith("org.flexunit.runners.Parameterized")]
public class MyTestNGTest
{
private var foo:Parameterized;
...
基本上,该错误意味着定义的[Runner]
在运行时不可用,如果类中没有静态引用导致它被链接,则会发生这种情况。
在FlexUnit 4.5.1中,这种方法改为使用[Rule]
,如下所示:
public class MyTestNGTest
{
[Rule]
public function paramaterizedRule:ParamaterizedRule = new ParamaterizedRule();
...
}
但是,我似乎无法看到IMethodRule
对于参数测试的实际实现(这个例子是虚构的)。