【问题标题】:How to unit test Django-CMS extensions?如何对 Django-CMS 扩展进行单元测试?
【发布时间】:2011-02-07 04:12:29
【问题描述】:

我正在尝试为我正在处理的 Django-CMS 实现获取一些测试覆盖率,但我不确定如何对插件/扩展进行单元测试。以前有没有人这样做过,如果有,怎么做?一些例子会很棒。

【问题讨论】:

  • +1,我也对这个感兴趣。

标签: django plugins django-cms


【解决方案1】:

如果我正确理解了您的问题,您可以在模块 cms/tests/plugins.py 中找到插件的单元测试示例,该模块位于保存 django-cms 安装的文件夹中。

基本上,您将 CMSTestCase 子类化并使用 django.test.client 中的 Client 类向您的 CMS 发出请求并检查结果响应。

关于如何使用客户端的信息可以在http://docs.djangoproject.com/en/dev/topics/testing/#module-django.test.client找到

【讨论】:

    【解决方案2】:

    cms/tests/plugins.py 所示的测试更像是集成测试而不是单元测试,而且这是相当重的,并且有时需要整个系统的很大一部分启动和运行(不一定是错误的,只是在调试时不切实际)。

    DjangoCMS 是紧密集成的,所以我这里有一些技术可以“更接近金属”,而不是一个完整的解决方案:

    你需要一个 'Expando' 风格的假类:

    class Expando(object): # Never use in production!
        def __init__(self, **kw):
            self.__dict__.update(kw)
    

    实例化插件类的实例:

    from cms.plugin_pool import plugin_pool
    
    # ..in production code: class YourPlugin(CMSPlugin)...
    
    # This ensures that the system is aware of your plugin:
    YrPluginCls = plugin_pool.plugins.get('YourPlugin', None)
    
    # ..instantiate:
    plugin = YrPluginCls()
    

    健全性检查插件.render 方法:

    ctx = plugin.render({}, Expando(attr1='a1', attr2=123), None)
    

    使用实际模板渲染,检查输出:

    res = render_to_response(look.render_template, ctx)
    # assert that attr1 exist in res if it should
    # ..same for attr2
    

    BeautifulSoup 在验证小 DOM 片段的内容时很方便。

    使用管理表单字段间接检查模型属性的行为是否正确:

    from django.test.client import RequestFactory
    from django.contrib.auth.models import AnonymousUser
    
    # ...
    
    request = RequestFactory().get('/')
    request.user = AnonymousUser()
    a_field = plugin.get_form(request).base_fields['a_field']
    a_field.validate('<some valid value>')
    # Check that a_field.validate('<some invalid value>') raises
    

    【讨论】:

      猜你喜欢
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 2010-11-24
      • 2011-02-23
      • 2018-10-09
      相关资源
      最近更新 更多