我在使用谷歌应用引擎时开始考虑进行单元测试。从我读过的内容看起来有点棘手。因为您不能(而不是假设)对数据存储区运行测试。
我编写了一个抽象类来模拟数据存储模型类。并且它非常适用于返回get,all,fetch等上的模型数据(仅在小规模上尝试)返回类似结果的dbModel。
我还没有找到一个我满意的解决方案,就是如何区分使用哪个模型类。我想在运行webapp时使用模型进行单元测试和实际的db.Model。
我当前的解决方案在包含所有db.Models的.py中都是这样的:
if 'SERVER_SOFTWARE' in os.environ:
class dbTest(db.Model):
content = db.StringProperty()
comments = db.ListProperty(str)
else:
class dbTest(Abstract):
content = 'Test'
comments = ['test1', 'test2']
有点感觉它可能会破坏任何一分钟。这是可行的方法,还是可以将这些组合为一个类,如果正确调用db.Model,那么使用其他模型吗?
答案 0 :(得分:2)
而不是弄乱你的models.py
,我会选择gaeunit。
我在几个项目中成功使用它,我喜欢的功能是:
答案 1 :(得分:2)
结帐gaetestbed(docs)。它会截断数据存储区(以及所有其他服务,如memcache),并且可以非常轻松地从命令行进行测试。它确保在每次测试运行之前都有一个干净的环境。
我个人认为它比我见过的其他解决方案更好。
答案 2 :(得分:2)
既然你不能(而不是假设) 对数据存储区运行测试。
事实并非如此。您可以而且应该使用本地数据存储区实现作为测试工具 - 没有理由浪费时间为每个数据存储行为创建模拟。您可以使用其他海报建议的工具,例如noseGAE或gaeunit,但如果您想自己设置,请参阅this snippet。
答案 3 :(得分:1)
你在这里试图解决的问题不止一个......
首先,要使用GAE仿真运行测试,您可以查看我最喜欢的gaeunit。如果您不想从浏览器运行它们,那么您可以查看noseGAE(nose的一部分)。这应该为您提供命令行测试。
其次,关于你关于“创建依赖关系的开销”的评论,听起来你正在寻找一个好的单元测试和模拟框架。这些将允许您模拟数据库以进行不需要命中的测试。试试mox和mockito for python。