2016-06-27 8 views
-6

Ich habe Code-Schnipsel unten. Was ich nicht ändern kann, aber ich muss testen. Was es tut, ist es verbindet sich mit dem Server und erhält Daten, die ich brauche. Insbesondere muss ich fälschlicherweise Eingabe für variable Daten1 in Zeile 12 eingeben, um es zu testen. Aber ich kann es bisher nicht erreichen.Wie Generatoren in Python 3 zu testen. Es gibt Fehler die ganze Zeit

1. url = "http://localhost:8000" 
2. data = urllib.request.urlopen(url) 
3. 
4. def get_data(): 
5.  yield data.read() 
6. 
7. #generator 
8. def get_objects(in_stream): 
9.  json_object = "" 
10. buffer = b'' 
11. for data1 in in_stream: 
12.  data = buffer + data1 
13.  data = data.decode("utf-8") 
... 

22.for json_dict in get_objects(get_data()): 
23. print(repr(json_dict)) 

get_object (in_stream) muss eine Art iterable sein, oder? Also, ich versuche, eine Zeichenfolge zu übergeben:

def test_falsely(self): 
    self.assertEqual(solution.get_objects("bla bla"), "blabla") 

Aber ich erhalte eine Fehlermeldung:

====================================================================== 
FAIL: test_falsely (__main__.TestStringMethods) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "test.py", line 21, in test_falsely 
    self.assertEqual(solution.get_objects("bla bla"), "blabla") 
AssertionError: <generator object get_objects at 0x103433308> != 'blabla' 

Was mache ich falsch? Hat jemand eine Idee, wie man es testet? Vielen Dank.

+2

Nun, 'get_objects' nicht zurück oder etwas nachgeben, so ist dies kein [MCVE] . Nachdem Sie das gesagt haben, müssen Sie dem Generator beitreten, den Sie von 'get_objects' zurückbekommen. –

+0

gibt es den Code runter. Ich habe Auslassungspunkte gesetzt, um zu erkennen, dass ich etwas Code ausgeschnitten habe. Mein Fehler. –

Antwort

2

Ja, ein Generator kann nicht gleich einer Zeichenkette sein.

Wenn Sie Ihre Funktion aufrufen: get_objects("anything"), gibt ein Generatorobjekt zurück, das Sie durchlaufen können, um die Werte zu erhalten.

Wenn Sie zurück überprüfen möchten, ob das i te Element zu something gleich, sind:

for i, elem in enumerate(get_objects("bla bla")): 
    if i == 3: 
     return self.assertEqual(elem, something) 
+0

@ Cooper, Sie können es immer akzeptieren, wenn es Ihr Problem gelöst – ForceBru

+0

Ich versuche, Ihre Lösung zu testen, aber stieß auf ein anderes Problem mit der Eingabe jetzt und versuchen, es zu lösen. Ich werde auf jeden Fall wiederkommen. Soweit ich Bytes in 'get_objects (b'bla bla ') übergebe, bekomme ich irgendwie eine ganze Zahl hinein, wenn ich versuche, zu iterieren (Zeile 11 oben). Der Fehler tritt bei Zeile 13 auf und besagt, dass "int kein Attribut .decode" hat. –

+0

@ForceBry danke! :) –