如何在 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)