mock.patch applied at class level behaves incorrectly
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 77.2k
- Fork
- 36k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
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
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia riproducendo l’esempio in un piccolo modulo usando unittest.mock.patch, concentrandoti sui metodi test_ ereditati e sulle classi BaseFTests, MockedFTests, MockedFMockedGTests e MockedFStraightGTests. Traccia il comportamento delle patch a livello di classe in unittest.mock e aggiungi un test di regressione per il caso di ereditarietà segnalato. Il lavoro è completo quando i test dell’esempio passano senza applicare la patch della sottoclasse alle classi sorelle.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- python
- Ambito
- testing-qa
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 42/100