Ich habe durch die Seite https://docs.python.org/3/library/unittest.mock-examples.html gegangen und ich sehe, dass sie ein Beispiel auf aufgeführt haben, wie Generatoren verspottenWie verspotten Generatoren mit mock.patch
Ich habe einen Code, wo ich einen Generator rufen Sie mich an einen Satz geben von Werten, die ich als ein Wörterbuch speichere. Ich möchte die Aufrufe dieses Generators in meinem Komponententest verspotten.
Ich habe den folgenden Code geschrieben und es funktioniert nicht.
Wohin gehe ich falsch?
In [7]: items = [(1,'a'),(2,'a'),(3,'a')]
In [18]: def f():
print "here"
for i in [1,2,3]:
yield i,'a'
In [8]: def call_f():
...: my_dict = dict(f())
...: print my_dict[1]
...:
In [9]: call_f()
"here"
a
In [10]: import mock
In [18]: def test_call_f():
with mock.patch('__main__.f') as mock_f:
mock_f.iter.return_value = items
call_f()
....:
In [19]: test_call_f()
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-19-33ca65a4f3eb> in <module>()
----> 1 test_call_f()
<ipython-input-18-92ff5f1363c8> in test_call_f()
2 with mock.patch('__main__.f') as mock_f:
3 mock_f.iter.return_value = items
----> 4 call_f()
<ipython-input-8-a5cff08ebf69> in call_f()
1 def call_f():
2 my_dict = dict(f())
----> 3 print my_dict[1]
KeyError: 1