【发布时间】:2011-04-15 12:25:13
【问题描述】:
我目前正在为一个相对复杂的应用程序实施测试套件。该应用程序是基于 Java 和 Spring 的,带有 Web 前端。前端测试也可以用 Java 编写(使用 Silk4J 及其自动化客户端)。实际上编写测试不是问题,这是容易的部分。开始变得棘手的地方是各个测试的执行顺序。
目前我们正在使用 JUnit 编写测试。由于 JUnit 是一种单元测试工具,因此执行测试的顺序并不固定。如果我们只是为应用程序的每个模块创建测试,我们很快就会遇到麻烦。一些测试必须依赖其他部分才能正常工作,并且来自其他模块的某些数据是可用的。我可以以将应用程序状态初始化为预定义状态然后执行其测试的方式为每个模块编写测试,但是必须清理和准备状态将是一项相当大的工作。更复杂的测试需要跨多个模块的大量准备和测试场景。
我正在寻找的是一个测试框架,其中每个测试都可以以某种方式定义其要求以及它测试/提供的服务(对 create-user-feature 的测试实际上可以创建用户......至少它应该)。现在我不想硬编码使用哪些数据以及以何种顺序运行哪个测试,因为确定顺序非常复杂,并且对应用程序的更改将需要完全重构测试。
例如,我的“create-user-test”创建用户作为实际检查用户是否正确创建的副作用。对我来说,是否使用 userA、userB 或 userC 测试此功能并不重要,只要它经过测试即可。如果我现在有另一个测试“create-account-test”需要一个只有 userC 满足的用户,那么测试系统应该知道“哦 ... create-account-test 需要 userC,尚未创建但通过userC 到我的“create-user-test”,这将创建它。因此,在最终执行中,它在“create-account-test”之前使用 userC 运行“create-user-test”,并因此使用“create”的副作用-user-test”创建“create-account-test”所需的状态。
通过检查我的测试的要求和服务。这样的系统应该能够创建一个包含每个测试至少一次的非循环图(从而测试整个功能),但不必为每个测试准备/拆除应用程序状态,或者如果无法做到则触发错误创建这样的图表。至少这样我可以创建仍然可以维护的巨大测试场景。
我知道这有点复杂。如果有人已经在这样的框架上工作,我搜索了一段时间。不幸的是,我找不到类似的东西。
现在我希望这里有人指导我使用工具或告诉我为什么这是一个完全坏主意。 “嘿......好主意......还没有人创造这样的东西”......肯定会大大缩短我下班后的空闲时间,因为在那种情况下我可能会开始开发这样的工具;-)
克里斯
【问题讨论】:
-
似乎有人实际上已经在研究我正在寻找的东西,不幸的是,这项工作似乎相对理论化。 docstoc.com/docs/73022961/…
标签: testing automated-tests integration-testing functional-testing