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

2024-10-06 12:34:33 发布

您现在位置:Python中文网/ 问答频道 /正文

在使用googleappengine时,我已经开始关注unittest。从我所读的来看,这似乎有点棘手。因为您不能(也不应该)针对数据存储运行测试。在

我编写了一个抽象类来模拟数据存储模型类。在get、all、fetch等返回实体模型数据(只是在小范围内尝试过)返回类似dbModel的结果。在

我还没有找到一个我满意的解决方案,那就是如何区分使用哪个模型类。我想把模型用于单元测试和实际数据库模型用于webapp运行时。在

我当前的解决方案看起来像在My.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']

感觉好像随时都有可能破裂。这是该走的路还是可以把这些合并为一个类,如果数据库模型是否正确调用,否则使用模型?在


Tags: 数据模型数据库dbget抽象类unittestcontent
3条回答

Since you can't (and not suppose to) run your test's against the datastore.

这不是真的。您可以而且应该将本地数据存储实现用作测试工具—没有理由浪费时间为每个数据存储行为创建模拟。你可以使用noseGAE或gaeunit之类的工具,正如其他海报所建议的那样,但是如果你想自己设置它,请参见this snippet。在

签出gaetestbeddocs)。它将数据存储(以及所有其他服务,如memcache)分离出来,并使从命令行进行测试变得非常容易。它确保在每次测试运行之前有一个干净的环境。在

我个人认为这比其他解决方案更好。在

我不想把你的models.py搞乱,我会选择gaeunit。在

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

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

相关问题 更多 >