首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FlexUnit4集成测试之间将数据库重置为已知状态的最佳方法?

FlexUnit4集成测试之间将数据库重置为已知状态的最佳方法?
EN

Stack Overflow用户
提问于 2010-10-24 16:21:30
回答 3查看 1.2K关注 0票数 3

背景:

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

我正在使用RemoteObjects为flex服务模块的FlexUnit4编写异步集成测试。在一些测试中,我修改测试数据并将其查询回来,以查看是否一切正常(这里显示的一种技术:http://saturnboy.com/2010/02/async-testing-with-flexunit4)

问题:

如何在每个FlexUnit4测试方法(或测试方法链)之前将数据库重置为已知状态?在我的Java服务器集成测试中,我通过组合DBUnit和Spring的事务来实现这一点--在每个测试方法之后进行回滚。但是,这些Flexunit集成跨越多个请求,因此涉及多个事务。

除非在后端实现集成测试服务API,否则如何实现。其他人肯定也遇到过这种情况吗?类似的问题以前曾被问过( Rollback database after integration (Selenium) tests ),但没有令人满意的答案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-01 16:42:50

有几种选择:

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

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

  • 在服务器上使用可以快速删除的数据库(例如,H2)。添加一个服务API,您可以从客户端调用它来重置DB.

  • 将撤销添加到您的web应用程序中。

  • 使用一个数据库,它允许只使用一个命令,比如Lotus,

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

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

在服务器上,编写测试,确保它将执行正确的DB modifications.

  • Similar以“根本没有数据库”,隐藏在DB层中访问DB的所有代码并使用接口访问它。这允许您编写一个模拟层,它的行为类似于真正的数据库,但它将数据保存在内存中。听起来很简单,但通常要做很多工作。
票数 5
EN

Stack Overflow用户

发布于 2010-11-01 18:12:16

根据测试数据库的大小,您可以自动化干净备份/还原,从而为您提供每次测试运行的确切环境。

我在当前的项目(不同的平台)上有这种方法,我们也用相同的方法测试数据模式更改脚本。

票数 1
EN

Stack Overflow用户

发布于 2010-10-29 20:27:40

我脱水了(我为自己的缺点找借口)。很抱歉,如果这个答案太接近“后端的集成测试服务API”响应,而您不想要的话。

成立flexUnit‘很久以前’的团队做出了选择,并根据我们的架构创建了解决方案,其中一些只适用于我们的基础设施。需要考虑的是: 1)我们所有的后端方法都返回相同的远程映射类。2)我们的大多数方法都有一个抽象的方法,告诉方法在方法的开头运行"begin transaction“(或不运行),在末尾运行"commit transaction”(不确定db块)。

后者可能不是最面向对象的解决方案,但下面是异步单元测试调用所做的事情:每个单元测试都调用相同的方法--包装器,我们传递--在方法名称/包-locale中,加上...args。一个beginTransaction完成了。调用该方法,将一个false传递给FE单元测试方法(忽略beginTransaction和commitTransaction行),运行所有内容,生成主“response”类并将其返回给单元测试方法。运行db-rollback,并将响应返回给单元测试。

我们所有的单元测试都是基于回滚事务。我不能告诉你他们在设置跳伞时遇到的问题,但这是我对schtuff如何工作的一般理解。

希望这能有所帮助。如果不是可以理解的。祝你好运,--杰里米

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4009099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档