如何在 Python 中测试生成器 3. 一直报错
How to test Generators in Python 3. It gives error all the time
我有下面的代码片段。我无法更改,但我需要测试。它的作用是连接到服务器并获取我需要的数据。特别是我需要在第 12 行为变量 data1 插入错误输入以对其进行测试。
但是目前我还做不到。
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)
一定是某种可迭代的,对吧?所以,我试图在那里传递一个字符串:
def test_falsely(self):
self.assertEqual(solution.get_objects("bla bla"), "blabla")
但是我得到一个错误:
======================================================================
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'
我做错了什么?有人知道如何测试它吗?谢谢。
是的,生成器不能等于字符串。
当你调用你的函数时:get_objects("anything")
,它returns一个生成器对象你可以迭代以获取值。
如果要检查返回的第 i
个元素是否等于 something
,请执行:
for i, elem in enumerate(get_objects("bla bla")):
if i == 3:
return self.assertEqual(elem, something)
我有下面的代码片段。我无法更改,但我需要测试。它的作用是连接到服务器并获取我需要的数据。特别是我需要在第 12 行为变量 data1 插入错误输入以对其进行测试。 但是目前我还做不到。
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)
一定是某种可迭代的,对吧?所以,我试图在那里传递一个字符串:
def test_falsely(self):
self.assertEqual(solution.get_objects("bla bla"), "blabla")
但是我得到一个错误:
======================================================================
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'
我做错了什么?有人知道如何测试它吗?谢谢。
是的,生成器不能等于字符串。
当你调用你的函数时:get_objects("anything")
,它returns一个生成器对象你可以迭代以获取值。
如果要检查返回的第 i
个元素是否等于 something
,请执行:
for i, elem in enumerate(get_objects("bla bla")):
if i == 3:
return self.assertEqual(elem, something)