1

我继承了一个 Flash CS3 旧版应用程序,我正在尝试对其进行一些重构。最终一切都应该转移到 JS,但现在我想开始使用我所拥有的,而不是尝试完全重写。首先,我想安装一个小回归测试。

我正在尝试在它自己的包中设置测试,以减少它与原始应用程序的接缝。该应用程序使用了很多全局变量,我不希望干扰这些。

我无法进行回归测试,因为我不知道如何正确导入包。我很确定我正在监督一些明显的事情。

我的文件夹结构如下所示:

+- ascripts
|     +-- dependencies.as
|
+- root.fla
+- initialize.as
+- regressiontest.as 

root.fla是我唯一的 fla 文件。它只包含:

stop();
include "initialize.as" // Let's go outside!

initialize.as包含所有的魔法。我正在使用这个外部文件,所以我不必使用 Flash IDE(因为它是最糟糕的编码 IDE)。在那里我有这个:

// ... 
import fl.controls.ComboBox;
include "ascripts/dependencies.as"


var t = new regressiontest.TestRunner(); // 1.


// ... 

1.我正在尝试实例化我的回归测试类。它可以在文件regressiontest.as中找到,如下所示:

package regressiontest {
    public class TestRunner {
        public function TestRunner() {
            trace('Hello');
            // Actual Test Code Here ...
        }
    }
}

因此,现在当我使用 Strg+Shift+Enter 进行 Flash 和调试电影时,我收到以下错误消息。我尝试了所有我能想到的方法,所以这里是我到目前为止所取得的成就的概述:

var t = new TestRunner();

消息:1180:调用可能未定义的方法 TestRunner。

var t = new regressiontest.TestRunner();

留言

root.as: 1120: 未定义属性回归测试的访问。

regressiontest.as: 5001: 包'regressiontest'的名称不反映这个文件的位置。请更改此文件中的包定义名称,或移动该文件。文件夹\regressiontest.as

regressiontest.as: 5008: 定义“TestRunner”的名称不反映该文件的位置。请更改此文件中的定义名称,或重命名文件。文件夹\regressiontest.as

import regressiontest.TestRunner;
var t = new TestRunner();

root.as,第 19 行:1172:定义回归测试:找不到 TestRunner。

root.as,第 20 行:1180:调用可能未定义的方法 TestRunner。

最让我困惑的是,Flash 似乎以某种方式在 regressiontest.as 中获取了类定义。当我提出一个明显的错误时,例如

public function TestRunner() {
    shoelace('Hello');
}

并使用它来实例化类的对象:

var t:TestRunner = new regressiontest.TestRunner();

然后我收到消息

regressiontest.as: 1180: 调用可能未定义的方法 shoelace。

现在人们可能会认为实例化会导致问题。但是,当我将代码从鞋带设置为跟踪并离开实例化时,我收到以下消息:

消息 场景 1,层“AS”,第 1 帧:1046:找不到类型或不是编译时常量:TestRunner。

root.as: 1120: 未定义属性回归测试的访问。

regressiontest.as: 5001: 包'regressiontest'的名称不反映这个文件的位置。请更改此文件中的包定义名称,或移动该文件。文件夹\regressiontest.as

regressiontest.as: 5008: 定义“TestRunner”的名称不反映该文件的位置。请更改此文件中的定义名称,或重命名文件。文件夹\regressiontest.as

我尝试重命名包中的文件,尝试重命名包,尝试使用 import regressiontest.* 导入;等等。我错过了什么?

  • 我需要将文件名设置为什么?是否需要匹配 PACKAGE NAME 或 CLASS NAME?
  • 我错过了一些疯狂的骆驼案规则吗?
  • 包装名称或类似的东西是否有最大长度?
  • 我是否忘记正确配置闪存或 FLA 文件?
  • 我错过了一些神奇的关键字吗?
  • 我的脚本开头的包含或导入可能会产生副作用吗?

我可以重现这些步骤,并且可以通过 github 提供包。

提前谢谢你,来自德国海德堡的无知问候

约翰内斯

4

1 回答 1

1

在我看来,TestRunner是类和regressiontest包,所以你需要导入类。

import regressiontest.TestRunner;
var t:TestRunner = TestRunner();

此外,您必须进行此更改。

  1. 文件名必须与类完全相同,替换regressiontest.asTestRunner.as
  2. 为包创建一个文件夹并调用它regressiontest,放在里面TestRunner.as
于 2012-12-31T14:37:17.797 回答