深入探索Flex开发:测试断言、编译调试与部署技巧
立即解锁
发布时间: 2025-08-18 00:51:44 阅读量: 3 订阅数: 7 

### 深入探索Flex开发:测试断言、编译调试与部署技巧
#### 1. 使用Hamcrest库进行复杂断言
在测试用例中,有时需要进行复杂的模式匹配。Hamcrest库能帮助我们创建复杂的断言并进行测试。
##### 1.1 问题与解决方案
- **问题**:需要在测试用例中进行复杂的模式匹配。
- **解决方案**:使用Hamcrest库定义的匹配函数来创建复杂断言。
##### 1.2 示例分析
以“确保数组中的每个元素都是Sprite类型且没有子元素”为例,若使用简单的标准ActionScript,需要编写一个for循环和两个条件,并将结果存储在一个布尔变量中。而使用Hamcrest库,可将其简化为以下代码:
```actionscript
assertThat(arr, everyItem(both(isA(flash.display.Sprite )).and(hasProperty("numChildren", 0))));
```
此语句包含四个方法:
- **everyItem()**:接受一个返回布尔值的操作,并将其应用于列表中的每个项。若该操作对列表中的每个项都不返回true,则`everyItem()`方法返回false。
- **both()**:接受两个返回布尔值的操作,若这两个值都为true,则返回true。
- **isA()**:若对象是传入的类型,则返回true。例如,当传入`int`类型时,对`String`对象调用`isA()`方法将返回false。
- **hasProperty()**:若对象具有与传入该方法的第二个参数匹配的属性,则返回true。在示例中,测试对象是否具有名为`numChildren`的属性,以及该属性是否等于0。
##### 1.3 其他示例
假设存在一个名为`ValidDate`的类,它执行一些逻辑并返回一个特定用途的有效日期。以下是使用Hamcrest库的另一个示例:
```actionscript
package flexUnitTests
{
import org.hamcrest.date.dateBetween;
import oreilly.cookbook.flex4.ValidDate;
public class ValidDateTest
{
// 待测试类的引用声明
private var classToTestRef : oreilly.cookbook.flex4.ValidDate;
public function ValidDateTest(methodName:String=null) {
super(methodName);
}
[After]
override public function tearDown():void {
classToTestRef = new ValidDate();
super.tearDown();
}
[Test]
public function testReturnDate():void {
assertThat(classToTestRef.returnDate(), dateBetween(new Date(2000, 1, 1), new Date(2020, 1, 1)));
}
}
}
```
`dateBetween()`方法可通过一行非常易读的代码比较两个日期。
此外,Hamcrest库还能轻松对字符串或数组执行复杂断言。例如:
- 确保数组中至少有一个日期在1999年之前的项和至少有一个日期在2008年之后的项:
```actionscript
assertTrue(array, hasItems( dateBefore(new Date(1999, 1, 1)), dateAfter(new Date(2008, 1, 1))));
```
- 确保字符串以特定子字符串开头、包含特定子字符串并以特定子字符串结尾:
```actionscript
assertTrue(str, allOf(startsWith("Dependency injection"), endsWith("business"), containsString("Flex")));
```
对于以下字符串,上述代码将返回true:
```actionscript
var str:String = "Dependency injection with Flex UI components can be tricky business.";
```
Hamcrest库还可用于Flex验证器和格式化器,以简化验证和格式化逻辑。
#### 2. Flex应用的编译、调试与部署
##### 2.1 编译工具概述
编译Flex应用最常见的方式是通过Flash Builder或在命令行中调用MXML编译器(mxmlc),但还有许多其他工具可用于编译应用、移动文件或调用应用。例如,make、Ant和Rake等工具可简化整个编译和部署流程,使我们能够使用单个命令来调用它。
##### 2.2 调试工具
Flex调试可通过Flash Player的调试版本进行,它能让我们看到`trace`语句的结果。使用Flash Builder,我们可以逐行调试代码并检查变量的属性。Flash Builder还引入了一个新的分析视图,可用于检查内存使用情况以及对象的创建和删除。此外,还有许多开源工具可供选择:
- **De MonsterDebugger**:由De Monsters开发,可在Flash中创建`trace`语句查看器,不仅能在应用执行期间查看`trace`语句,还能在执行期间对对象进行基本检查。可从[http://www.demonsterdebugger.com](http://www.demonsterdebugger.com)下载。
- **FlashTracer**:由Alessandro Crugnola开发,在Firefox浏览器中安装此插件后,可接收应用中执行的任何`trace`语句。使用Flash Tracer需要创建一个`flashlog.txt`文件。可从[http://www.sephiroth.it/firefox](http://www.sephiroth.it/firefox)下载。
- **安装Flash调试播放器并配置写入日志文件**:安装调试播放器后,根据不同操作系统打开相应位置的`mm.cfg`文件,并输入以下内容:
```plaintext
ErrorReportingEnable=1
TraceOutputFileEnable=1
```
`flashlog.txt`文件将根据操作系统写入以下位置:
| 操作系统 | `flashlog.txt`文件位置 |
| --- | --- |
| Mac OS X | MacHD:Users:user_name:Library:Preferences:Macromedia:Flash Player:Logs:flashlog.txt |
| Windows Vista或Windows 7 | C:\Users\user_name\AppData\Roaming\Macromedia\Flash Player:Logs:flashlog.txt |
| Windows 2000/XP | C:\Documents and Settings\user_name\Application Data\Macromedia\Flash Player:Logs:flashlog.txt |
| Linux | /home/user_name/.macromedia/Flash_Player/Logs/flashlog.txt |
若`Logs`目录和`flashlog.txt`文件不存在,在更改`mm.cfg`后,需要运行包含`trace`语句的SWF文件,以强制Flash Player创建它们。
##### 2.3 使用组件编译器
若要将Flex组件编译成可作为运行时共享库(RSL)使用的SWC文件,可使用组件编译器(compc),并通过以下方式操作:
- **语法**:
```plaintext
compc -source-path . -include-classes oreilly.cookbook.foo -output example.swc
```
- **查看所有选项**:
```plaintext
compc -h
```
0
0
复制全文
相关推荐










