背景:

我有一个 Flex Web 应用程序,它通过 BlazeDS 与 Java 后端进行通信。Flex 客户端由一个包含视图和表示模型的 Flex 客户端模块和一个包含模型(值对象)和服务对象的单独的 Flex 服务模块组成。

我正在使用 FlexUnit4 为 Flex-service 模块的 RemoteObjects 编写异步集成测试。在一些测试中,我修改测试数据并查询它以查看是否一切正常(此处显示的技术: http://saturnboy.com/2010/02/async-testing-with-flexunit4)

问题:

在每个 FlexUnit4 测试方法(或测试方法链)之前,如何将数据库重置为已知状态?在我的 Java 服务器集成测试中,我通过 DBUnit 和 Spring Test 事务的组合来完成此操作——在每个测试方法之后回滚。但这些 Flexunit 集成跨越多个请求,从而跨越多个事务。

如果没有在后端实现集成测试服务API,如何实现这一点?当然其他人也遇到过这种情况吗?之前也有人问过类似的问题( 集成(Selenium)测试后回滚数据库 ),但没有得到满意的答案。

有帮助吗?

解决方案

有几种选择:

  1. 如果您使用主键序列:数据库加载测试数据后,删除序列生成器并将其替换为以 -1 并倒计时。测试后,可以删除主键<0的对象。修改现有数据的测试中断。

    类似的方法是创建一个特殊用户,或者,如果您有 created 如果时间戳列,则初始数据必须在过去的某个日期之前。但这需要额外的索引。

  2. 使用服务器上可以快速擦除的数据库(氢2, , 例如)。添加一个服务 API,您可以从客户端调用该 API 来重置数据库。

  3. 将撤消添加到您的网络应用程序。这是一项相当大的努力,但却是一个非常酷的功能。

  4. 使用允许通过单个命令及时回溯的数据库,例如 Lotus Notes。

  5. 根本不使用数据库。相反,编写一个代理服务器,它将用正确的输出响应正确的输入。将一些代码添加到您的真实服务器,以将交换的数据写入文件并从中创建测试。

    或者编写针对真实服务器运行并创建这些文件的测试用例。这将允许您在修改服务器或客户端上的代码时跟踪哪些文件发生更改。

    在服务器上,编写测试以确保它将执行正确的数据库修改。

  6. 与“根本没有数据库”类似,将所有访问DB的代码隐藏在DB层中,并使用接口来访问它。这允许您编写一个模型层,其行为类似于真实数据库,但将数据保存在内存中。听起来很简单,但通常需要大量工作。

其他提示

根据您的测试数据库的大小,可以自动清洁的备份/恢复,给你,你对每个测试运行的具体环境。

我有这种做法在我目前的项目(不同平台)的,我们也用同样的方法测试数据架构更改脚本。

我脱水(我最喜欢的借口不足之处)。如果这个答案是太接近响应你不想“在后端集成测试服务API”真对不起。

这设置起来的FlexUnit“很久很久以前”的决策制定和创建解决方案基于我们的架构,该团队其中一些只适用于我们的基础设施。需要考虑的事情: 1)我们所有的后台方法返回相同远程映射类。 2)最重要的是我们的方法有一个抽象的方法告诉的方法(或不)运行在方法的开始“开始交易”和底“提交事务”(不知道你的数据库块的)

后者是不是可能是最面向对象的解决方案,但在这里是一个异步单元测试呼叫的功能:每个单元测试调用相同的方法,包装,我们传递的方法名/包的语言环境,加上[...] ARGS。一的BeginTransaction完成。所述方法被调用,通过虚假为FE单元测试方法(以忽略的BeginTransaction和commitTransaction线),一切都运行并产生主“反应”级,并返回到单元测试方法。一个DB-回滚运行,并且响应被返回到所述单元测试。

这是我们的单元测试都是基于滚动回事务。我不能告诉你的问题,他们已经建立花言巧语的时候,但是这是我的schtuff如何工作的一般理解。

希望有所帮助。可以理解的,如果它不。 祝您好运, --jeremy

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top