[Zope] unittest a component that is using zope.dublincore

Thierry Florac thierry.florac at onf.fr
Mon Mar 30 06:00:23 EDT 2009


Le samedi 28 mars 2009 à 15:46 +0100, Jean-Michel FRANCOIS a écrit :
> Hi,
>   I m trying to make my first content type with zope3. The code is
> available there: http://github.com/toutpt/z3weblog.entry/tree
> 
> I m following the second edition of the book "web component developement
> with zope3", i know this is not the last edition. So, i m making a
> ISized component for my simple content type, with a simple unittest, but
> now, i want to use zope.dublincore package and i get an error when i m
> launch the tests:
> 
> =================
> (zope3apps)toutpt at linux-tggd:~/workspace/zope3apps/apps/prout> .bin/test
> Running tests at level 1
> Running unit tests:
>   Running:
> ...
> 
> Error in test test_size_for_display
> (z3weblog.entry.tests.test_size.EntrySizeTestCase)
> Traceback (most recent call last):
>   File
> "/home/toutpt/outils/python_system/2.5.4/lib/python2.5/unittest.py",
> line 260, in run
>     testMethod()
>   File
> "/home/toutpt/workspace/zope3apps/apps/prout/src/z3weblog.entry/src/z3weblog/entry/tests/test_size.py",
> line 21, in test_size_for_display
>     msg = self.size.sizeForDisplay()
>   File
> "/home/toutpt/workspace/zope3apps/apps/prout/src/z3weblog.entry/src/z3weblog/entry/size.py",
> line 24, in sizeForDisplay
>     unit, chars = self.sizeForSorting()
>   File
> "/home/toutpt/workspace/zope3apps/apps/prout/src/z3weblog.entry/src/z3weblog/entry/size.py",
> line 18, in sizeForSorting
>     dc = dcI.IZopeDublinCore(self.context)
> TypeError: ('Could not adapt', <z3weblog.entry.content.ZODBWeblogEntry
> object at 0x839382c>, <InterfaceClass
> zope.dublincore.interfaces.IZopeDublinCore>)
> 
> .
> 
> Error in test test_size_for_sorting
> (z3weblog.entry.tests.test_size.EntrySizeTestCase)
> Traceback (most recent call last):
>   File
> "/home/toutpt/outils/python_system/2.5.4/lib/python2.5/unittest.py",
> line 260, in run
>     testMethod()
>   File
> "/home/toutpt/workspace/zope3apps/apps/prout/src/z3weblog.entry/src/z3weblog/entry/tests/test_size.py",
> line 16, in test_size_for_sorting
>     unit, size = self.size.sizeForSorting()
>   File
> "/home/toutpt/workspace/zope3apps/apps/prout/src/z3weblog.entry/src/z3weblog/entry/size.py",
> line 18, in sizeForSorting
>     dc = dcI.IZopeDublinCore(self.context)
> TypeError: ('Could not adapt', <z3weblog.entry.content.ZODBWeblogEntry
> object at 0x839382c>, <InterfaceClass
> zope.dublincore.interfaces.IZopeDublinCore>)
> 
> 
>   Ran 4 tests with 0 failures and 2 errors in 0.007 seconds.
> 
> Tests with errors:
>    test_size_for_display (z3weblog.entry.tests.test_size.EntrySizeTestCase)
>    test_size_for_sorting (z3weblog.entry.tests.test_size.EntrySizeTestCase)
> 
> ============
> 
> The trace back is very clear, the zope.dublincore components are not
> loaded. The question is : what is the best way to load components in
> unittests ? Do just i have to load the zcml of zope.dublincore, or do i
> have to register only needed components, if so how can i do that ?


You can also provide your own adapter and register it for your tests.
This example is extracted from zope.app.container unit tests :


from datetime import datetime
from zope.security import checker
from zope.dublincore.interfaces import IZopeDublinCore
from zope.app.testing import ztapi

class EntrySizeTestCase(unittest.TestCase):

    def setUp(self):
        class FauxDCAdapter(object):
            implements(IZopeDublinCore)

            __Security_checker__ = checker.Checker(
                {"created": "zope.Public",
                 "modified": "zope.Public",
                 "title": "zope.Public",
                 },
                {"title": "zope.app.dublincore.change"})

            def __init__(self, context):
                pass
            title = 'faux title'
            size = 1024
            created = datetime(2001, 1, 1, 1, 1, 1)
            modified = datetime(2002, 2, 2, 2, 2, 2)

        ztapi.provideAdapter(IZODBWeblogEntry, IZopeDublinCore,
FauxDCAdapter)


Not tested anyway, but hope will help...

  Thierry Florac
-- 
  Chef de projet intranet/internet
  Office National des Forêts - Département Informatique
  2, Avenue de Saint-Mandé
  75570 PARIS Cedex 12
  Mél : thierry.florac at onf.fr
  Tél. : +33 01.40.19.59.64
  Fax. : +33 01.40.19.59.85



More information about the Zope mailing list