如何在库中包含单元测试的最佳实践

时间:2009-11-24 18:25:54

标签: flex unit-testing flexunit

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

在图书馆中组织这些测试的最佳方法是什么?目前,我的所有代码都在src/,而我的测试在test/但我已设置启动辅助Flex项目以运行单元测试。当我想运行测试时,我还手动添加和删除库中的测试文件。

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

4 个答案:

答案 0 :(得分:2)

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

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

另外,我们还使用FlexUnit作为我们的测试框架。我喜欢它。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

我们使用maven作为主构建系统,Sonatype Flex插件在构建期间运行所有单元测试,甚至在我们基于Linux的Continuum服务器上也是如此。 Maven默认在'tests'目录中查找测试,这是选择该位置的一个很好的理由。

答案 3 :(得分:1)

我将反对这里的流程并建议为您的测试完全设置一个不同的项目。我相信一般来说,只要它一致且有些可管理,你在哪里进行测试并不重要。但是,对我而言,有三个令人信服的理由为测试设立一个单独的项目:

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

  2. 减少膨胀,减少文件。测试并不总是微不足道的。但即使他们都是,他们仍然在使用磁盘空间。由于测试不是在生产环境中使用,所以这是毫无意义的。此外,将测试分成新项目可以使文件结构更加清晰。

  3. 当测试不在时,CI环境通常更清晰。

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

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

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

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