代码之家  ›  专栏  ›  技术社区  ›  fredrik

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

  •  1
  • fredrik  · 技术社区  · 13 年前

    我已经开始在使用google app engine时查看unittest。从我所读到的似乎有点棘手。因为您不能(也不应该)对数据存储运行测试。

    我编写了一个抽象类来模拟数据存储模型类。在get、all、fetch等(仅在小范围内尝试)返回类似dbModel的结果时,返回模型数据非常有效。

    我还没有找到一个满意的解决方案,那就是如何区分要使用的模型类。我想使用单元测试的模型和运行webapp时的实际db.Model。

    我当前的解决方案在包含所有db.Models的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']
    

    感觉好像随时都可能坏掉。这样做是可行的,还是可以将它们合并为一个类,如果正确调用了db.Model,就可以使用模型了?

    4 回复  |  直到 13 年前
        1
  •  2
  •   Luke Francl    13 年前

    退房 gaetestbed ( docs ). 它清除了数据存储(以及所有其他服务,如memcache),并使从命令行进行测试变得非常容易。它确保在每次测试运行之前都有一个干净的环境。

    我个人认为这比我看到的其他解决方案要好。

        2
  •  2
  •   systempuntoout    13 年前

    而不是搞乱你的 models.py 我会和 gaeunit .

    我已经在几个项目中成功地使用了它,我喜欢的特性是:

    1. 只需将一个文件添加到项目(gaeunit.py)中,就可以完成
    2. Gaeunit将测试数据存储与开发存储区隔离(即测试不会污染开发数据库)
        3
  •  2
  •   Nick Johnson David Cournapeau    13 年前

    既然你不能(也不应该) 对数据存储运行测试。

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

        4
  •  1
  •   Sudhir Jonathan    13 年前

    你要解决的问题不止一个。。。

    首先,对于使用GAE仿真运行测试,您可以查看 gaeunit ,我最喜欢。如果您不想从浏览器运行它们,那么可以查看 noseGAE (部分 nose ). 这将给您提供命令行测试。

    其次,关于“创建依赖项开销”的评论,听起来像是在寻找一个好的单元测试和模拟框架。这些可以让您模拟数据库进行不需要命中的测试。尝试 mox mockito for python .