0

我有一个长期运行的项目,它被编译为发布模块,但测试套件可能会为每个模块运行所有测试。

这个项目相当大——目前大约有 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 切换为使用无头模式,也没有变化
4

0 回答 0