Benutzerspezifische Werkzeuge
Sie sind hier: Startseite Erstellen eines Site-Policy-Produkts Tests schreiben

Tests schreiben

erstellt von Veit Schiele zuletzt verändert: 07.07.2010 12:30 © Veit Schiele 2007–2010

Tests erstellen

Statt der bereits angelegten Datei src/vs.policy/vs/policy/tests.py erstellen wir ein eigenes tests-Modul:

$ rm -rf src/vs.policy/vs/policy/tests.py
$ mkdir src/vs.policy/vs/policy/tests
$ touch src/vs.policy/vs/policy/tests/__init__.py

Anschließend definieren wir im neu erstellten tests-Ordner zunächst ein Test-Fixture, eine gleichbleibende Testumgebung mit der Basisklasse VsPolicyTestCase. Hierzu erstellen wir im tests-Verzeichnis die Datei base.py mit folgendem Inhalt:

from Products.Five import zcml
from Products.Five import fiveconfigure

from Testing import ZopeTestCase as ztc

from Products.PloneTestCase import PloneTestCase as ptc
from Products.PloneTestCase.layer import onsetup

@onsetup
def setup_vs_policy():

    fiveconfigure.debug_mode = True
    import vs.policy
    zcml.load_config('configure.zcml', vs.policy)
    fiveconfigure.debug_mode = False

    ztc.installPackage('vs.policy')

setup_vs_policy()
ptc.setupPloneSite(products=['vs.policy'])

class VsPolicyTestCase(ptc.PloneTestCase):
    """This base class is used for all tests in this package.
    Utility or setup code can be added if necessary.
    """

Der @onsetup-Decorator sorgt dafür, dass zunächst vs.policy importiert und erst dann eine Plone-Site mit vs.policy aufgesetzt wird. Darüberhinaus wird die configure.zcml-Datei auch dann registriert, wenn kein entsprechender zcml-slug für die Site vorhanden ist.

VsPolicyTestCase ist die Basisklasse für alle Tests in diesem Paket. Bei Bedarf kann hier weiterer Code für das Setup oder Hilfsmethoden eingefügt werden.

Die eigentlichen Unit-Tests werden in der Datei test_setup.py definiert und zu einer Testsuite zusammengestellt:

import unittest
from vs.policy.tests.base import VsPolicyTestCase

from Products.CMFCore.utils import getToolByName

class TestSetup(VsPolicyTestCase):

    def test_portal_title(self):
        self.assertEquals("Veit Schiele", self.portal.getProperty('title'))

    def test_portal_description(self):
        self.assertEquals("Welcome to Veit Schiele", self.portal.getProperty('description'))

def test_suite():
    suite = unittest.TestSuite()
    suite.addTest(unittest.makeSuite(TestSetup))
    return suite

Testen

Der Testrunner kann nun gestartet werden mit:

$ ./bin/instance test -s vs.policy

Wären die Tests geschrieben worden, bevor die Profile erstellt wurden, hätten beide Tests fehlschlagen müssen und der Testrunner folgendes ausgeben:

AssertionError:"Welcome to Veit Schiele != ''
...
AssertionError:'Veit Schiele != 'Plone site'
Ran 2 tests with 2 failures and 0 errors

Nachdem die Profile angelegt wurden, sollte jedoch keiner der Tests fehlschlagen:

Ran 2 tests with 0 failures and 0 errors.

Plone 4

Ab Zope 2.12 kommt der test-Befehl nicht mehr unmittelbar mit Zope mit. Stattdessen kann ein Buildout-Abschnitt mit zc.recipe.testrunner erstellt werden:

[buildout]
parts =
    …
    test
…

[test]
recipe = zc.recipe.testrunner
eggs =
    Zope2
    Plone
    ${buildout:eggs}
script = test

Anschließend können Sie ein Egg testen z.B. mit:

$ ./bin/test -s vs.policy

Weitere Informationen erhalten Sie in zc.recipe.testrunner

Artikelaktionen