Greifen Sie vom Dekorateur auf sich selbst zu

79

In setUp () -Methode von Unittest Ich habe Setup einige Selbst Variablen, die in aktuellen Tests später referenziert werden. Ich habe auch einen Dekorateur für die Protokollierung erstellt. Gibt es eine Möglichkeit, wie ich vom Dekorateur auf diese Selbstvariablen zugreifen kann ?

Der Einfachheit halber veröffentliche ich diesen Code:

def decorator(func):
    def _decorator(*args, **kwargs):
        # access a from TestSample
        func(*args, **kwargs)
    return _decorator

class TestSample(unittest.TestCase):    
    def setUp(self):
        self.a = 10

    def tearDown(self):
        # tear down code

    @decorator
    def test_a(self):
        # testing code goes here

Was wäre der beste Weg, um vom Dekorateur auf ein (set in setUp ()) zuzugreifen ?

Kevin
quelle

Antworten:

119

Da Sie eine Methode dekorieren und selfein Methodenargument ist, hat Ihr Dekorateur zur selfLaufzeit Zugriff darauf . Offensichtlich nicht zur Parsetime, da es noch keine Objekte gibt, nur eine Klasse.

Also ändern Sie Ihren Dekorateur zu:

def decorator(func):
    def _decorator(self, *args, **kwargs):
        # access a from TestSample
        print 'self is %s' % self
        return func(self, *args, **kwargs)
    return _decorator
Dave
quelle