Как запустить тесты в продукте, разрабатываемом в Plone 4?

Я разрабатываю продукт для 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?

In 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')

person joeforker    schedule 08.04.2011    source источник


Ответы (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']

Не забудьте добавить «test» к «parts» в основном разделе «buildout» вашего buildout.cfg. Запустите bin/buildout, и теперь у вас должен быть скрипт bin/test. Дополнительные параметры и объяснения см. на странице PyPI этого рецепта.

Теперь запуск «bin/test» должен запускать все тесты для всех яиц, явно названных в части экземпляра. Это может запустить слишком много тестов. Используйте 'bin/test -s your.package', чтобы запустить только тесты для вашего.пакета, при условии, что ваш.пакет является частью яиц в экземпляре.

Обратите внимание, что вместо «прохода», который у вас сейчас есть в тесте, лучше добавить тест, который, как вы точно знаете, не пройдет, например «self.assertEqual(True, False)». Тогда будет легче увидеть, что ваш тест действительно был запущен и что он не соответствует ожиданиям.

Когда у меня есть простая сборка для тестирования одного конкретного пакета, который я разрабатываю, я обычно расширяю одну из конфигураций сборки plonetest, например это для Plone 4; вы можете взглянуть на это для вдохновения.

person maurits    schedule 08.04.2011
comment
Если вы установили с помощью унифицированного установщика, вы получите bin/test и другие инструменты, ориентированные на разработку, запустив bin/buildout -c develop.cfg. Отредактируйте файл develop.cfg, чтобы настроить параметры. - person SteveM; 09.04.2011

Вам нужно использовать zope.testrunner и zope.testing для запуска тестов. Тесты Plone нельзя запускать через нос, и мы не поддерживаем аргумент 'test_suite' для setup.py, изобретенный setuptools.

Другие ответы объясняют, как настроить сценарий запуска теста.

person Hanno Schlichting    schedule 09.04.2011

ptc.setupPloneSite() регистрирует отложенную функцию, которая будет запущена при настройке уровня zope.testrunner. Я предполагаю, что вы не используете zope.testrunner, и, следовательно, слой не настраивается, поэтому сайт Plone никогда не создается, отсюда и AttributeError, когда он впоследствии пытается получить объект портала.

person Ross Patterson    schedule 08.04.2011