2

我正在为zeocluster/src/...安装目录中的 Plone 4 开发产品,并且我有一个自动化测试。不幸的是,当我运行 'bin/client1 shell' 然后(path to Plone's Python)/bin/python setup.py test,它失败了。错误是

File "buildout-cache/eggs/Products.PloneTestCase-0.9.12-py2.6.egg/Products/PloneTestCase/PloneTestCase.py", line 109, in getPortal
    return getattr(self.app, portal_name)
AttributeError: plone

在 Plone 4 中运行自动化测试的正确方法是什么?

setup.py,

...
test_suite = "nose.collector"
...

失败的测试:

import unittest

from Products.PloneTestCase import PloneTestCase as ptc

ptc.setupPloneSite()

class NullTest(ptc.PloneTestCase):        
    def testTest(self):
        pass

def test_suite():
    return unittest.TestSuite([
            unittest.makeSuite(NullTest)
        ])

if __name__ == '__main__':
    unittest.main(defaultTest='test_suite')
4

3 回答 3

3

最好是编辑您的 buildout.cfg 并添加一个创建“bin/test”脚本的部分。像这样的东西:

[test]
recipe = zc.recipe.testrunner
# Note that only tests for packages that are explicitly named (instead
# of 'implicitly' added to the instance as dependency) can be found.
eggs =
# Use the name of the plone.recipe.zope2instance part here, might be zeoclient instead: 
    ${instance:eggs}
defaults = ['--exit-with-status', '--auto-color', '--auto-progress']

不要忘记在 buildout.cfg 的主要“buildout”部分的“parts”中添加“test”。运行 bin/buildout,你现在应该有一个 bin/test 脚本。有关更多选项和说明,请参阅本秘籍的PyPI 页面

现在运行 'bin/test' 应该为在实例部分中明确命名的所有鸡蛋运行所有测试。这可能会运行太多的测试。使用 'bin/test -s your.package' 仅运行 your.package 的测试,前提是 your.package 是实例中鸡蛋的一部分。

请注意,最好添加一个您肯定会失败的测试,而不是您现在在测试中拥有的“通过”,例如“self.assertEqual(True, False)”。然后更容易看到您的测试确实已经运行并且它按预期失败了。

当我有一个简单的构建来测试我正在开发的一个特定包时,我通常会扩展 plonetest 构建中的一个配置,例如Plone 4的配置;你可以看看那个以获得灵感。

于 2011-04-08T22:31:34.153 回答
3

你需要使用 zope.testrunner 和 zope.testing 来运行你的测试。克隆测试不能通过鼻子运行,我们不支持 setuptools 发明的 setup.py 的“test_suite”参数。

其他答案解释了如何设置测试运行脚本。

于 2011-04-09T14:25:29.333 回答
2

ptc.setupPloneSite() 注册一个延迟函数,该函数将在设置 zope.testrunner 层时实际运行。我猜你没有使用 zope.testrunner ,因此没有设置图层,因此永远不会创建 Plone 站点,因此当它随后尝试获取门户对象时出现 AttributeError 。

于 2011-04-08T22:21:59.950 回答