我正在为加载外部配置文件的应用程序设置功能测试套件。现在,我正在使用 flexunit 的 addAsync 函数来加载它,然后再次测试内容是否指向存在并且可以访问的服务。
这样做的问题是,拥有这种两阶段(或更多阶段)的方法意味着我在一个带有数十个断言的测试的上下文中运行我的所有测试,这似乎是一种使用框架的退化方式,并使错误更难找到。有没有办法像异步设置一样?是否有另一个测试框架可以更好地处理这个问题?
我正在为加载外部配置文件的应用程序设置功能测试套件。现在,我正在使用 flexunit 的 addAsync 函数来加载它,然后再次测试内容是否指向存在并且可以访问的服务。
这样做的问题是,拥有这种两阶段(或更多阶段)的方法意味着我在一个带有数十个断言的测试的上下文中运行我的所有测试,这似乎是一种使用框架的退化方式,并使错误更难找到。有没有办法像异步设置一样?是否有另一个测试框架可以更好地处理这个问题?
这很容易,但我花了 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
假设您使用的是 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 :)