Was würde ich tun möchte, ist dies ...Kann ein MagicMock-Objekt durchlaufen werden?
x = MagicMock()
x.iter_values = [1, 2, 3]
for i in x:
i.method()
Ich versuche, eine Unit-Test für diese Funktion zu schreiben, aber ich bin nicht sicher, wie man ohne Aufruf einige externe gehen etwa genannt alle Methoden spöttischen Ressource ...
def wiktionary_lookup(self):
"""Looks up the word in wiktionary with urllib2, only to be used for inputting data"""
wiktionary_page = urllib2.urlopen(
"http://%s.wiktionary.org/wiki/%s" % (self.language.wiktionary_prefix, self.name))
wiktionary_page = fromstring(wiktionary_page.read())
definitions = wiktionary_page.xpath("//h3/following-sibling::ol/li")
print definitions.text_content()
defs_list = []
for i in definitions:
print i
i = i.text_content()
i = i.split('\n')
for j in i:
# Takes out an annoying "[quotations]" in the end of the string, sometimes.
j = re.sub(ur'\u2003\[quotations \u25bc\]', '', j)
if len(j) > 0:
defs_list.append(j)
return defs_list
EDIT:
I Mocks werden mißbrauchen kann, ich bin nicht sicher. Ich versuche Unit wiktionary_lookup
Methode ohne Aufruf externer Dienste zu testen ... so ich mock urlopen..I mock fromstring.xpath() aber soweit ich sehen kann, muss ich auch durchlaufen den Rückgabewert von xpath()
und rufen Sie an eine Methode "text_contents()
" also das ist, was ich hier versuche.
Wenn ich völlig falsch verstanden haben, wie diese Methode zu Unittest dann mir bitte sagen, wo ich schief gelaufen ...
EDIT (Hinzufügen von aktuellen Unittest-Code)
@patch("lang_api.models.urllib2.urlopen")
@patch("lang_api.models.fromstring")
def test_wiktionary_lookup_2(self, fromstring, urlopen):
"""Looking up a real word in wiktionary, should return a list"""
fromstring().xpath.return_value = MagicMock(
content=["test", "test"], return_value='test\ntest2')
# A real word should give an output of definitions
output = self.things.model['word'].wiktionary_lookup()
self.assertEqual(len(output), 2)
Was möchten Sie in Ihrem Komponententest genau vortäuschen? Auch Ihr 'MagicMock' Beispiel. Was versuchst du genau mit dieser Liste zu machen? Ich vermute, Sie missbrauchen die Mocks hier. Aber ich bin mir nicht sicher, was genau Sie vorhaben. – idjaw
@idjaw, eine Antwort als EDIT hinzugefügt – deltaskelta
Können Sie Ihren Unittest-Code zeigen, um zu sehen, wo Vorschläge zur Verbesserung bereitgestellt werden könnten? – idjaw