Ich bin auf ein Problem gestoßen, von dem ich denke, dass es ein Fehler in den Bibliotheken ist, die ich verwende. Ich bin jedoch ziemlich neu in Python, Unittest und unittest.mock Bibliotheken, so dass dies nur ein Loch in meinem Verständnis sein kann.Warum schlägt unittest.mock fehl, wenn der Konstruktor der Produktionsklasse zusätzliche Argumente annimmt?
Während Tests bis zu einem gewissen Produktionscode hinzugefügt ich in einen Fehler laufen, ich habe eine minimale Probe erzeugt, die das Problem reproduziert:
import unittest
import mock
class noCtorArg:
def __init__(self):
pass
def okFunc(self):
raise NotImplemented
class withCtorArg:
def __init__(self,obj):
pass
def notOkFunc(self):
raise NotImplemented
def okWithArgFunc(self, anArgForMe):
raise NotImplemented
class BasicTestSuite(unittest.TestCase):
"""Basic test Cases."""
# passes
def test_noCtorArg_okFunc(self):
mockSUT = mock.MagicMock(spec=noCtorArg)
mockSUT.okFunc()
mockSUT.assert_has_calls([mock.call.okFunc()])
# passes
def test_withCtorArg_okWithArgFuncTest(self):
mockSUT = mock.MagicMock(spec=withCtorArg)
mockSUT.okWithArgFunc("testing")
mockSUT.assert_has_calls([mock.call.okWithArgFunc("testing")])
# fails
def test_withCtorArg_doNotOkFuncTest(self):
mockSUT = mock.MagicMock(spec=withCtorArg)
mockSUT.notOkFunc()
mockSUT.assert_has_calls([mock.call.notOkFunc()])
if __name__ == '__main__':
unittest.main()
Wie ich die Tests ausführen und die Ausgabe ist wie folgt:
E:\work>python -m unittest testCopyFuncWithMock
.F.
======================================================================
FAIL: test_withCtorArg_doNotOkFuncTest (testCopyFuncWithMock.BasicTestSuite)
----------------------------------------------------------------------
Traceback (most recent call last):
File "testCopyFuncWithMock.py", line 38, in test_withCtorArg_doNotOkFuncTest
mockSUT.assert_has_calls([mock.call.notOkFunc()])
File "C:\Python27\lib\site-packages\mock\mock.py", line 969, in assert_has_calls
), cause)
File "C:\Python27\lib\site-packages\six.py", line 718, in raise_from
raise value
AssertionError: Calls not found.
Expected: [call.notOkFunc()]
Actual: [call.notOkFunc()]
----------------------------------------------------------------------
Ran 3 tests in 0.004s
FAILED (failures=1)
Ich benutze Python 2.7.11, mit Mock-Version 2.0.0 über Pip installiert.
Irgendwelche Vorschläge für was ich falsch mache? Oder sieht das wie ein Fehler in der Bibliothek aus?
Nicht zu sicher über Ihr besonderes Problem, sondern nur eine Python Codierung note - für python2.7 Klassen, können Sie immer von 'erben wollen Objekt ', dh' Klasse WithCtorArg (Objekt): '. Klassennamen beginnen in der Regel mit einem Großbuchstaben (obwohl mir klar ist, dass sie in der Übersetzung in Ihren MCVE verloren gegangen sind). – dwanderson
danke @dwanderson. –