我将着手进行一些基于Python的大型App Engine项目,我认为在致力于单元测试策略之前,应该先检查Stack Overflow的“人群智慧”。我有一个现有的单元测试框架(基于单元测试定制亚军和扩展),我想使用,所以任何“重量级” /“侵入”,如鼻子,WebTest的,或gaeunit似乎不合适。我的世界观中至关重要的单元测试是轻量级且快速的测试,它们在极短的时间内运行,因此我可以一直不断地运行它们,而不会破坏我的开发节奏(例如,对于其他项目,我得到了总的来说,一个20K线项目的几十%的覆盖率是数十次,整个测试过程耗时5-7秒,耗时5-7秒,这是我认为相当不错的一套小型,快速单元,测试)。当然,我还将进行更丰富/更重的测试,一路进行与硒或风车的集成测试,这不是 我要问的是;-)-我在这个问题上(以及在我的大多数开发工作中;-)的重点是小型轻量级单元测试,该测试轻而易举地覆盖了我的代码,而不是更深层次的那些。
因此,我认为我基本上需要对各种关键App Engine子系统进行一组小型,非常轻量的模拟-数据存储,内存缓存,请求/响应对象以及对Webapp处理程序的调用,用户处理,邮件和&c,大致在此过程中优先顺序。我没有找到我想要的东西,所以在我看来我应该要么依靠mox,就像我过去经常做的那样,这基本上意味着要模拟给定测试中使用的每个子系统并设置所有期望值&c(虽然很严格,但每次工作量很大,并且对测试代码的内部非常敏感,即非常“白盒” y),或滚动我自己对每个子系统的仿真(并作为单元测试的一部分对仿真子系统的状态进行断言)。考虑到GAE强大的Python端强大的“存根”架构,后者似乎是可行的...但是我不敢相信我需要自己动手,也就是说,没有人已经写出了这样简单明了的模拟器!-)例如,数据存储,看来我需要的是或多或少已经是SDK一部分的“文件上的数据存储”存根,以及一种将其标记为只读且易于使用的访问器的方式,以声明有关数据存储的 状态 依此类推,一个子系统又一个子系统-每个似乎都需要比SDK中已有的“存根”体系结构“最高”的“多一点”。
因此,在投入并花一两天宝贵的开发时间“滚动我自己的” GAE子系统仿真以进行单元测试之前,我想我会与SO人群仔细检查一下,然后看看大家对此有何看法。 ..或者,如果已经有一些这样的模拟器的开放源代码集,我可以简单地重用它们(或进行最小程度的调整!-),而我在搜索中就没能找到它!-)
编辑:澄清一下,如果我自己动手,我计划在可行的情况下利用SDK提供的存根。但是例如,对于最初从文件中读取但最后没有保存的数据存储区,则没有存根,因此我需要对现有的存根进行子类化和调整(这也不提供在其上进行断言的特别方便的方法状态-与邮件服务存根相同,等等)。这就是我“滚动自己”的意思,而不是“从头开始重写”!-)
编辑:“为什么不使用GAEUnit”-GAEUnit适用于自己的用例,但是运行dev_appserver并在我的浏览器中(甚至通过urllib.urlopen)查看结果绝对不是我想要的-我想使用完全自动化的设置,适合在现有的基于扩展单元测试的测试运行框架中运行,并且不使用HTTP(该框架将“快速”测试定义为除其他外没有套接字和最小的磁盘I /的测试) --我们模拟或模拟这些-因此,通过gaeunit,我不能做得比“中级”测试更好。+没有方便的方法来为每个测试预填充数据存储(也没有用于帮助定制事物的OO结构)。
您无需编写自己的存根-SDK包含它们,因为它们是用来模拟生产API的。并非所有这些都适合在单元测试中使用,但大多数都适合。查看此代码,获取使用内置存根所需的设置/拆卸代码示例。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句