2

インストールのディレクトリ内で Plone 4 用の製品を開発してzeocluster/src/...おり、自動テストがあります。残念ながら、「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

テストを実行するには、zope.testrunner と zope.testing を使用する必要があります。Plone テストは、nose 経由で実行することはできず、setuptools によって考案された setup.py への 'test_suite' 引数はサポートされていません。

他の回答では、テスト ランナー スクリプトをセットアップする方法について説明しています。

于 2011-04-09T14:25:29.333 に答える
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」を実行すると、インスタンス部分で明示的に名前が付けられたすべての卵のすべてのテストが実行されます。これは非常に多くのテストを実行する可能性があります。your.package がインスタンスの卵の一部である場合、'bin/test -s your.package' を使用して、your.package のテストのみを実行します。

テストにある「パス」の代わりに、「self.assertEqual(True, False)」のように、確実に失敗することがわかっているテストを追加することをお勧めします。そうすれば、テストが実際に実行され、期待どおりに失敗したことが簡単にわかります。

私が開発中の 1 つの特定のパッケージをテストするための単純なビルドアウトがあるとき、私は通常 plonetest ビルドアウトの構成の 1 つを拡張します。これは Plone 4 用のものです。インスピレーションを得るためにそれを見ることができます。

于 2011-04-08T22:31:34.153 に答える
2

ptc.setupPloneSite() は、zope.testrunner 層がセットアップされるときに実際に実行される遅延関数を登録します。zope.testrunner を使用していないため、レイヤーがセットアップされていないため、Plone サイトが作成されないため、後でポータル オブジェクトを取得しようとすると AttributeError が発生すると思います。

于 2011-04-08T22:21:59.950 に答える