跳转到主要内容

在Zope 2中定义一些合理的测试层

项目描述

infrae.testing 为Zope 2中的测试定义了一些合理的测试层,可与zope.testing一起使用。

API

它定义了

  • 一个 ZMLLayer,在测试之前加载一个ZCML文件,并在之后清理,

  • 一个 Zope2Layer,在一个层中设置一个Zope 2测试实例。

    您可以根据需要自定义层设置来添加您的测试应用程序(如创建一个门户实例)。

    如果在运行测试时定义了shell环境变量 SETUP_CACHE,则此最后一个设置步骤将缓存在FileSystem存储中。这使得它在不同的测试会话之间可重用,并在运行测试时节省大量时间。当然,如果您更改了应用程序的安装方式,请不要使用缓存。

    默认情况下,它提供了一个与真实运行的Zope 2实例提供的环境完全等效的环境(包括所有VHM、会话支持、temp_folder等)。

    如果您将其与Zope 2中Testing模块的代码进行比较,它做的是同一件事情,但它更简单(并且可读性更强),提供了一个更接近运行时的环境,并且速度更快(因为您可以将设置操作缓存起来)。

    每个测试都在一个独立的DemoStorage中运行(安装在提供已安装应用程序的存储之上)。

  • 一个TestCase基类,它提供了一些额外的assert方法

    assertTriggersEvents(*events)

    上下文管理器,将断言给定名称的事件已被触发。

    assertNotTriggersEvents(*events)

    上下文管理器,将断言给定名称的事件未被触发。

    assertEventsAre(events, interface=None)

    将断言到目前为止触发的事件是给定列表中命名的那些。如果需要,可以将这些事件限制为实施给定接口的事件。

    assertContentEqual(c1, c2)

    将断言两个Zope对象是相同的。

    assertContentItemsEqual(l1, l2)

    将断言两个列表包含相同的Zope对象。顺序不重要。

    assertHashEqual(s1, s2)

    将断言给定字符串的md5哈希值相等。这在比较两个大型字符串且希望有可读的错误输出时很有用。

    assertStringEqual(s1, s2)

    将断言两个给定字符串的去除空格版本相同。

    assertEventsAre(events, interface=None)

    将断言触发的事件是给定列表中指定的那些。可以将事件限制为至少实现给定接口的事件。

    assertXMLEqual(xml1, xml2)

    将断言给定的两个XML字符串具有相同的结构和数据。XML字符串将被缩进并在比较之前。如果存在差异,错误将只报告缩进后的XML字符串之间的差异。当然,如果您希望比较两个空格重要的XML字符串,请不要使用此方法。

    可以从此包中安装一个名为xmlindent的脚本,该脚本将XML代码缩进得与assertXMLEqual方法相同。

  • 一个TestMethods类,您可以通过它访问assert方法,而无需测试用例。这使您可以访问unittest.TestCase的所有默认assert方法和上面记录的assert方法。

  • suite_from_package函数将从一个包中找到的文件构造一个unittest.TestSuite。一个*.txt文件将创建DocFileSuite,而一个*.py文件将创建一个DocTestSuite。可以插入其他类型的测试文件。

如果您使用ZCMLLayerZope2Layer,您可以使用两个不同的回调注册表

  • testCleanUp,在每次测试后调用

  • layerCleanUp,在每次层之后调用

这些回调注册表有一个add方法,可以用来注册新的清理函数

from infrae.testing import testCleanUp

testCleanUp.add(my_cleanup_function)

示例

ZCMLLayer

以下是一个测试名为corp.testpackage的包的例子。该包有一个ftesting.zcml文件,它主要加载其自己的configure.zcml

import unittest

from infrae.testing import ZCMLLayer
import corp.testpackage

layer = ZCMLLayer(corp.testpackage)


class MyTestCase(unittest.TestCase):

    layer = layer

该层提供了一个可以用于在测试后期解析模块的grok()方法。

Zope2Layer

现在我们的corp.testpackage是一个提供一些内容的Zope 2扩展。我们想测试其安装。

import unittest

from infrae.testing import ZCMLLayer
import corp.testpackage


class CorpLayer(Zope2Layer):
    """Add some installation tasks to the Zope2Layer.
    """
   default_products = Zope2Layer.default_products + ['CMFCore']
   default_packages = Zope2Layer.default_packages + ['corp.testpackage']
   default_users = Zope2Layer.default_users + {'corp_user': 'CorpRole'}

   def _install_application(self, app):
      factory = app.manage_addProduct['corp.testpackage']
      factory.manage_addCorpPortal('portal')

layer = CorpLayer(corp.testpackage)


class MyTestCase(unittest.TestCase):

    layer = layer

    def setUp(self):
        self.root = self.layer.get_application()
        self.layer.login('corp_user')

当然,您的 ZCML 必须 包含您的依赖包的 ZCML。此外,我们不建议将 Five 添加到层作为 default_products,它会变得疯狂(但请将其包含在您的 ZCML 中!)。

该层为您提供了以下有用的方法

login(username)

以指定的用户名登录。

logout()

登出。

get_root_folder()

返回数据库的根,包装在请求中。

get_application()

返回包装在请求中的数据库根。

代码

代码可通过 Mercurial 仓库获得:[https://hg.infrae.com/infrae.testing](https://hg.infrae.com/infrae.testing)

更改

1.3 (2012-09-03)

  • suite_from_package 现在更具通用性。其他测试文件类型可以插入到此发现功能中。

  • 添加两个不同的清理回调集:每个测试后一个,每个层后一个。这比 zope.testing 提供的默认回调集提供了更多可能性。

  • 重构 Zope 事件辅助函数和测试方法,使其更具通用性。

  • 添加一个包含在测试用例中定义的所有测试方法的类。这使得可以在没有测试用例的情况下使用测试方法。

1.2 (2011-11-07)

  • 针对 Python 2.7 和 Zope 2 2.13 进行更新。

1.1 (2010-10-07)

  • 添加两个上下文管理器:assertTriggersEvents 和 assertNotTriggersEvents 用于事件测试。

  • 在 Zope2 请求容器中,默认主机名为 localhost,而不是 foo

  • 修复重新加载数据库时 SETUP_CACHE 选项(由于 Zope2 会话容器设置代码而没有工作)。

1.0 (2010-07-14)

  • 初始发布。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分发

infrae.testing-1.3.tar.gz (19.0 kB 查看哈希值)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面