在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。可以插入其他类型的测试文件。
如果您使用ZCMLLayer或Zope2Layer,您可以使用两个不同的回调注册表
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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a020f7ee3541070e91adcd7d06fe2243c9a7f94e8a75fa2c5902a2ce7c8073fb |
|
MD5 | e494906b92f0d71c443f91cde5bd0f3e |
|
BLAKE2b-256 | 66ab6c968504fcc1ebff26e16d489b4bf402d18122d3828c79082b4555150606 |