1

我正在为加载外部配置文件的应用程序设置功能测试套件。现在,我正在使用 flexunit 的 addAsync 函数来加载它,然后再次测试内容是否指向存在并且可以访问的服务。

这样做的问题是,拥有这种两阶段(或更多阶段)的方法意味着我在一个带有数十个断言的测试的上下文中运行我的所有测试,这似乎是一种使用框架的退化方式,并使错误更难找到。有没有办法像异步设置一样?是否有另一个测试框架可以更好地处理这个问题?

4

3 回答 3

1

这很容易,但我花了 2 天时间才弄明白。解决方案:

首先,您需要在某处创建一个静态变量。

 public static var stage:Stage

有一个 FlexUnitApplication.as 由 flexunit 框架创建,在 onCreationComplete() 函数中,您可以将阶段设置为之前创建的静态引用:

private function onCreationComplete():void
    {
        var testRunner:FlexUnitTestRunnerUIAS=new FlexUnitTestRunnerUIAS();
        testRunner.portNumber=8765; 
        this.addChild(testRunner); 
        testStageRef.stage=stage //***this is what I've added
        testRunner.runWithFlexUnit4Runner(currentRunTestSuite(), "testsuitename");
    }

当您访问程序中的阶段时,您应该将其替换为:

if(stage==null) stage=testStageRef.stage
于 2012-01-30T12:06:39.253 回答
0

听起来您需要删除加载该外部文件的依赖关系。几乎所有异步测试都可以通过使用模拟框架来删除。 ASMock是 Fl​​ex 的绝佳选择。它将允许您伪造 URLoader 对象并返回伪造的配置来运行您的测试。模拟将帮助您编写更好的单元测试,因为您可以同步或异步模拟所有依赖项。

于 2010-04-23T20:15:23.927 回答
0

假设您使用的是 FlexUnit 4,可以从 [BeforeClass] 方法调用 addAsync:

public class TestFixture
{
    [BeforeClass]
    public static function fixtureSetup() : void
    {
        // This static method will be called once for all the tests
        // You can also use addAsync in here if your setup is asynchronous
        // Any shared state should be stored in static members
    }

    [Test]
    public function particular_value_is_configured() : void
    {
        // Shared state can be accessed from any test
        Assert.assertEquals(staticMember.particularValue, "value");
    }
}

话虽如此,测试访问文件的代码实际上是一个集成测试。我也几乎无法反对使用 ASMock :)

于 2010-05-12T09:48:15.960 回答