Mit selbst in python @ patch dekorateur

Ich versuche, Python's mock.patch zu verwenden, um Unit-Tests mit Nase zu implementieren.

class A: def setUp(self): self.b = 8 #contrived example @patch.object('module.class', 'function', lambda x: self.b) def testOne(self): # do test # 

Hier beschwert Patch, dass es sich nicht selbst versteht (was richtig ist). Was ist der beste Weg, um diese Art von Funktionalität in einer sauberen Weise zu bekommen?

Ich weiß, dass ich eine globale Variable verwenden kann, oder dass ich es im Test verspotten kann (aber das beinhaltet, dass ich die Objekte am Ende des Tests aufräumst).

One Solution collect form web for “Mit selbst in python @ patch dekorateur”

Du kannst nicht self auf Methodendekorateur verwenden, weil du in der Klassendefinition bist und das Objekt nicht existierst. Wenn du wirklich auf dich self zugreifen willst und nicht nur irgendwelche statischen Werte totest kannst du den folgenden Ansatz betrachten: totest ist ein Modul in meinem totest und fn ist die Methode, die ich patch, darüber hinaus verwende ich einen festen return_value statt eine Funktion Für ein besser lesbares Beispiel

 class MyTestCase(unittest.TestCase): def setUp(self): self.b = 8 #contrived example def testOne(self): with patch('totest.fn', return_value=self.b) as m: self.assertEqual(self.b, m()) self.assertTrue(m.called) @patch("totest.fn") def testTwo(self,m): m.return_value = self.b self.assertEqual(self.b, m()) self.assertTrue(m.called) 

In testOne() Ich benutze patch als Kontext und ich habe den vollen Zugriff auf sich self . In testTwo() (das ist meine Standard-Weg) Ich habe meine Mock m zu Beginn des Tests und dann verwenden Sie es.

Schließlich habe ich patch() anstelle von patch.object() weil ich nicht wirklich verstehe, warum du patch.object() aber du kannst es ändern, wie du willst.

  • Pythonschock und Bibliotheken, die nicht installiert sind
  • Testen argparse mit unbescheidenen und verspotten
  • Django Benutzer Setup für Nase Tests
  • Überspringen aller Unit-Tests, aber eine in Python mit Dekorateure und Metaklassen
  • Kann das Python-Coverage-Modul die Zeilen in einem Unit-Test bedingt ignorieren?
  • Wie gruppiere ich Unit-Tests in Django bei einer höheren Granularität als die App?
  • Wie behaupte ich, dass ein Funktionsaufruf keinen Fehler mit unittest zurückgibt?
  • Erhalten der End-Speicher-Adresse eines Speicherbereichs über Python / Ctypes
  • Speziell benannte Verzeichnisse mit Nosetests
  • Unbekannter Tkinter File Dialog
  • Wie man Firefox-Profil mit Selen umschaltet - ohne einen neuen Treiber zu benennen?
  • Python ist die beste Programmiersprache der Welt.