Different behavior with mock to same class or different class
Dieses Issue hat noch niemand übernommen.
- Vorherrschende Sprache
- Python
- Sterne
- 77.2k
- Forks
- 35.9k
- PR-Merge-Kennzahlen
- PR-Kennzahlen ausstehend
Beschreibung
Bug report
Bug description:
import unittest
from unittest.mock import patch
class Number:
def __init__(self, value):
print(f'init: {value}')
self.value = value
def get_value(self):
return self.value
class MockNumber:
def __init__(self, value):
print(f'mock init: {value}')
self.value = value
def get_value(self):
return self.value
class TestNumber(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_number(self):
number = Number(1)
with patch.object(Number, '__new__', return_value=number):
test = Number(2)
print(test.get_value())
mock_number = MockNumber(1)
with patch.object(Number, '__new__', return_value=mock_number):
test = Number(2)
print(test.get_value())
if __name__ == '__main__':
unittest.main()
The output is
init: 1
init: 2
2
mock init: 1
1
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
When mock the function new of class Number to return an instance of MockNumber, the behavior is simple: just return the instance of MockNumber.
But when mock the function to return an instance of Number, the function of init will still be called.
CPython versions tested on:
3.11
Operating systems tested on:
Linux
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 mit dem bereitgestellten unittest und vergleiche patch.object(Number, 'new'), wenn es ein Number gegenüber einem MockNumber zurückgibt. Verfolge das Verhalten der Objekterzeugung in Python rund um new und init, und ermittle anschließend, ob der Unterschied beabsichtigt ist; als abgeschlossen gilt die Aufgabe, wenn das Verhalten bestätigt und durch geeignete Regressionstests oder Dokumentation abgedeckt ist.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- python
- Bereich
- compilers
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100