mock.patch applied at class level behaves incorrectly
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 36k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug report
When applying @mock.patch to classes where the test_ method is inherited, this applies the patch to the base class,, instead of to the specific class. In this case, the patch to the g method applies in MockedFTests and MockedFStraightGTests.
# a.py
import unittest
from unittest import mock
def f():
return 41
def g():
return 43
class BaseFTests(unittest.TestCase):
def test_a(self):
self._asserts(f())
def _asserts(self, val):
print(self, val)
@mock.patch('a.f', new=lambda: 2)
class MockedFTests(BaseFTests):
def _asserts(self, val):
print(self, val)
self.assertEqual(val, 2)
self.assertEqual(g(), 43)
@mock.patch('a.g', new=lambda: 3)
class MockedFMockedGTests(MockedFTests):
def _asserts(self, val):
print(self, val)
self.assertEqual(val, g()-1)
class MockedFStraightGTests(MockedFTests):
def _asserts(self, val):
print(self, val)
self.assertEqual(val, 2)
self.assertEqual(g(), 43)
Expect all tests to pass.
Actual output: 2 tests fail with error AssertionError: 3 != 43
Your environment
- CPython versions tested on: Python 3.10.4 on Windows
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne damit, das Beispiel in einem kleinen Modul mit unittest.mock.patch nachzustellen, wobei du dich auf geerbte test_-Methoden und die Klassen BaseFTests, MockedFTests, MockedFMockedGTests und MockedFStraightGTests konzentrierst. Verfolge das Verhalten von Patches auf Klassenebene in unittest.mock und füge einen Regressionstest für den gemeldeten Vererbungsfall hinzu. Erledigt ist es, wenn die Tests des Beispiels bestehen, ohne den Patch der Unterklasse auf Geschwisterklassen anzuwenden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- testing-qa
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 42/100