我有一个长期运行的项目,它被编译为发布模块,但测试套件可能会为每个模块运行所有测试。
这个项目相当大——目前大约有 1250 个测试用例(类),总共大约有 4000 个类。这是一个 asunit3 项目,因此所有测试用例都列在一个 AllTests.as 文件中。
显然,我不会一直运行所有测试——该套件需要几分钟才能运行,所以大部分时间我都在运行集中测试,但我每天运行几次包括集成测试等的完整套件.
在我最后几个小时的工作中,我不再能够成功构建和运行整个套件。我们有一个脚本允许我们使用包名或类名过滤测试,所以我可以 testpackage['modules'] 或 testpackage['com'] 等。我也可以排除包 - testallexcept['utils'] 等等上。
我可以运行任何和所有测试子集,但是如果我尝试测试整个集合,我会得到:
Warning: Failed to parse corrupt data.
如果我只过滤掉几个类,那么我可以让 swf 编译和打开,但它只是一个白盒,实际上并没有运行测试。如果我过滤更多,那么一切都很好。我过滤哪些似乎并不重要——只要我取出大约 15 个测试用例,一切都很好(尽管我还没有找到一个确切的数字,它是 ok / not ok 之间的界线。)
我正在编译-benchmark
并获得以下输出:
Initial setup: 34ms
start loading swcs 7ms Running Total: 41ms
Loaded 45 SWCs: 253ms
precompile: 456ms
Files: 4013 Time: 16087ms
Linking... 91ms
SWF Encoding... 833ms
/Users/me/Documents/clients/project/bin/ProjectShellRunner.swf (4888318 bytes)
postcompile: 927ms
Total time: 17312ms
Peak memory usage: 413 MB (Heap: 343, Non-Heap: 70)
mxmlc finished compiling bin/ProjectShellRunner.swf in 18 seconds
由于峰值内存使用量超过了 mxmlc 中的默认堆,我将其增加到
VMARGS="-Xmx1024m -Dsun.io.useCanonCaches=false "
这似乎没有帮助。
asunit3 和 projectsprouts 的设置方式将所有测试放在一个 AllTests.as 文件中。这现在超过 2500 行,并导入所有 1250 个测试用例。
在对班级数量、班级长度、一个班级的进口数量等方面的硬性限制方面,我有什么遗漏吗?或者除了java的VM堆之外我可以更改的任何设置?我正在使用 Flex 4.2 mxmlc 编译器。
显然,我可以通过一个脚本来解决这个问题,以运行一系列子集而不是一个套件,但我想了解为什么会发生这种情况。
有什么线索吗?
基于来自 twitter 的 Qs 的一些额外信息:
- 我正在运行 Mac OS X 10.8.5
- mxmlc 通过命令行运行
- 我试过强制它使用 32 位运行时 - 没有变化
- 我已将 mxmlc 切换为使用无头模式,也没有变化