2

我正在开发一个名为 ActionScript 3.0 的通用代码库,as3lib其中包括对核心 API 的几个扩展和一些有用的功能。我编写了几个单元测试(使用 FlexUnit)以确保一切正常。

在库中组织这些测试的最佳方式是什么?目前,我有我的所有代码src/和我的测试,test/但我已经建立了一个辅助 Flex 项目来运行单元测试。当我想运行测试时,我还手动从库中添加和删除测试文件。

我在做什么似乎不对。有没有更好的办法?最好是编译后的库不包含测试文件,但我不需要两个单独的项目来测试它们。

4

4 回答 4

2

我们在我公司做这些事情的方式是我们实际上将两者都包含在源目录下,然后我们有两个我们使用的应用程序 mxml 文件。一个是测试套件,它包括所有到单元测试类的适当链接,另一个是主应用程序。我们在 src 文件夹中还有两个包结构:一个包结构 com.. 和另一个 tests.com... 确保单元测试的所有源代码始终在测试包中——这样你就可以使用只有一个 SVN 忽略,您还可以确保您的测试不会与其他项目创建依赖和硬编码关系。

我们使用两种方法来确保不包含 test.com 源文件。自动构建系统仅引用主应用程序,并且由于仅从 com. 导入,因此 mxmlc.exe 将仅包含主应用程序的文件。在本地构建时,在 eclipse 中,您可以通过单击 Debug 旁边的小箭头并滚动到“Organize Favorites”来控制构建方式。当您单击“添加”时,您应该能够选择引用 Application 类的所有根级 .mxml 文件。请务必添加基础应用程序和新的单元测试应用程序文件。然后单击“确定”时,箭头现在允许您作为主应用程序或单元测试框架进行调试。

顺便说一句,我们还使用 FlexUnit 作为我们的测试框架。我喜欢。

于 2009-12-07T04:47:09.450 回答
1

我的做法与您过去描述的方式类似,但似乎SpringAS可以非常方便地从配置中动态添加和删除它们。你试过调查吗?

于 2009-11-24T21:31:53.143 回答
1

我们在库的顶层有单独的 src 和测试目录。我们的应用程序是库项目的非常薄的包装器,因此它们不需要任何测试。我们还有一个 FlexUnit 应用程序项目,用于从 FlexBuilder 运行测试。

我们使用 maven 作为我们的主要构建系统,Sonatype Flex 插件在构建过程中运行我们所有的单元测试,甚至在我们基于 linux 的 Continuum 服务器上。Maven 默认在“测试”目录中寻找测试,这是选择该位置的一个很好的理由。

于 2009-12-09T11:20:08.147 回答
1

我将在这里逆流而上,并建议为您的测试设置一个完全不同的项目。我相信通常情况下,将测试放在哪里并不重要,只要它是一致的并且在某种程度上易于管理。但是,对我来说,有三个令人信服的理由需要单独的测试项目:

  1. 关注点分离。首先,您的库有一个目的,而测试有另一个目的。虽然测试需要库才能运行,但库对测试没有真正的用途。请注意,我并不是说测试没有用,远非如此。这些测试用于验证库的健康状况,但在生产环境中,这些测试没有任何作用。

  2. 更少的膨胀,更小的文件。测试并不总是微不足道的。但即使他们都是,他们仍然会使用磁盘空间。由于无论如何测试都不会在生产环境中使用,因此这是没有意义的。此外,将测试分离到一个新项目中可以使文件结构更加清晰。

  3. 当测试不存在时,CI 环境通常更易于设置。

虽然至少有可能解决编译器指令的第二个问题,但是当将两者分开要容易得多时,这是不必要的工作。测试可能需要您使用相同命名空间(内部类的任何人?)的库或应用程序也不是问题,因为您的测试项目可能会镜像命名空间。显然,这使得在命名空间中没有名称冲突是必要的,但这是微不足道的。

在 Flash Builder 支持方面,将事物分成两个项目非常好。创建新测试所需要做的就是右键单击要测试的任何类,要求创建新测试并确保在弹出的对话框中选择测试项目而不是当前项目。这确实是我和我的团队成员在进入 TDD 时很难证明编写测试的主要原因,刚开始的开销太大。在 IDE 的当前状态下,它非常简单和有用。

然而,与任何技术一样,也有一些警告。一方面,除非记录在案,否则测试在不同的项目中并不明显。在同一个项目中进行测试可以有效地解决这个问题。另一方面,通过配置环境中可能拥有的 maven 或其他依赖项管理工具,可以轻松解决此问题。另一个问题是,如果您的测试项目中确实有一个包结构反映库或应用程序的包结构,那么在同步这些结构时会有一些维护开销。虽然不是一个大问题并且使用脚本很容易解决,但它仍然值得一提。

无论如何,我就是这样做的。

于 2010-09-01T13:30:59.780 回答