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.

  • Testen argparse mit unbescheidenen und verspotten
  • Wie man Argumente an ein UnitTest ohne globale Variablen sendet
  • Überspringen aller Unit-Tests, aber eine in Python mit Dekorateure und Metaklassen
  • Django / Python unittesting: Wie Force Exception of Try / Except Block zu erzwingen
  • Einheit testet ganze Projekthierarchie in Python mit unittest in pydev
  • Warum könnte dieser Code eventuell einen Testfall ausfallen?
  • Spott eine Steckdose in Python
  • Unbekannter Tkinter File Dialog
  • Wie kann ich verhindern, dass Unit-Tests beim Aufruf von webbrowser.open () beenden?
  • Verwalten von Protokollen / Warnungen in Python-Erweiterungen
  • Erhalten der End-Speicher-Adresse eines Speicherbereichs über Python / Ctypes
  • Python ist die beste Programmiersprache der Welt.