2010-03-17 28 views
3

Comment peut-il que ce cas de testLes propriétés Python sont-elles endommagées?

import unittest 

class PropTest(unittest.TestCase): 
    def test(self): 
     class C(): 
      val = 'initial val' 

      def get_p(self): 
       return self.val 

      def set_p(self, prop): 
       if prop == 'legal val': 
        self.val = prop 

      prop=property(fget=get_p, fset=set_p) 

     c=C() 
     self.assertEqual('initial val', c.prop) 

     c.prop='legal val' 
     self.assertEqual('legal val', c.prop) 

     c.prop='illegal val' 
     self.assertNotEqual('illegal val', c.prop) 

échoue comme ci-dessous?

Failure 
Traceback (most recent call last): 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/unittest.py", line 279, in run 
    testMethod() 
    File "/Users/jacob/aau/admissions_proj/admissions/plain_old_unit_tests.py", line 24, in test 
    self.assertNotEqual('illegal val', c.prop) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/unittest.py", line 358, in failIfEqual 
    (msg or '%r == %r' % (first, second)) 
AssertionError: 'illegal val' == 'illegal val' 
+0

Dupliquer: http://stackoverflow.com/questions/2240351/python-2-6-4-property-decorators-not-working –

+0

Ceci est une critique légitime que le message d'erreur craint lorsque vous essayez d'utiliser 'propriété 'mais a oublié la nouvelle classe de style/doit hériter de *' Object' *. Les IDE pourraient attraper celui-ci. – smci

Répondre

13

Votre classe C ne hérite pas de object ou de toute autre classe nouveau style, il est donc une classe de style ancien (et donc ne prend pas en charge les propriétés). Les descripteurs sont uniquement pour les classes de style nouveau. Pour corriger, remplacez class C() par class C(object).

http://www.python.org/download/releases/2.2.3/descrintro/ fournit quelques détails, si vous êtes intéressé. Les classes de style nouveau sont meilleures de plusieurs façons.

+0

Merci Mike. C'était rapide. Je suis juste tombé sur la même réponse ici: http://stackoverflow.com/questions/2240351/python-2-6-4-property-decorators-not-working – Jacob