如何区分webapp和unittest之间的模型类

时间:2010-11-30 11:37:46

标签: python google-app-engine

我在使用谷歌应用引擎时开始考虑进行单元测试。从我读过的内容看起来有点棘手。因为您不能(而不是假设)对数据存储区运行测试。

我编写了一个抽象类来模拟数据存储模型类。并且它非常适用于返回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,那么使用其他模型吗?

4 个答案:

答案 0 :(得分:2)

而不是弄乱你的models.py,我会选择gaeunit

我在几个项目中成功使用它,我喜欢的功能是:

  1. 只需要添加到项目中的一个文件(gaeunit.py)即将完成
  2. Gaeunit将测试数据存储区与开发存储区隔离开来(即测试不会污染您的开发数据库)

答案 1 :(得分:2)

结帐gaetestbeddocs)。它会截断数据存储区(以及所有其他服务,如memcache),并且可以非常轻松地从命令行进行测试。它确保在每次测试运行之前都有一个干净的环境。

我个人认为它比我见过的其他解决方案更好。

答案 2 :(得分:2)

  

既然你不能(而不是假设)   对数据存储区运行测试。

事实并非如此。您可以而且应该使用本地数据存储区实现作为测试工具 - 没有理由浪费时间为每个数据存储行为创建模拟。您可以使用其他海报建议的工具,例如noseGAE或gaeunit,但如果您想自己设置,请参阅this snippet

答案 3 :(得分:1)

你在这里试图解决的问题不止一个......

首先,要使用GAE仿真运行测试,您可以查看我最喜欢的gaeunit。如果您不想从浏览器运行它们,那么您可以查看noseGAEnose的一部分)。这应该为您提供命令行测试。

其次,关于你关于“创建依赖关系的开销”的评论,听起来你正在寻找一个好的单元测试和模拟框架。这些将允许您模拟数据库以进行不需要命中的测试。试试moxmockito for python