【问题标题】:How to test Generators in Python 3. It gives error all the time如何在 Python 3 中测试生成器。它总是报错
【发布时间】:2016-10-29 13:48:21
【问题描述】:

我有下面代码的sn-p。我无法改变,但我需要测试。它的作用是连接到服务器并获取我需要的数据。特别是我需要在第 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 不会返回或产生任何东西,所以这不是minimal reproducible example。话虽如此,你需要加入你从get_objects返回的生成器。
  • 它会生成代码。我用省略号表示我删掉了一些代码。我的错。

标签: python python-3.x testing generator python-unittest


【解决方案1】:

是的,generator 不能等于字符串。

当你调用你的函数:get_objects("anything"),它返回一个生成器对象你可以迭代来获取值。

如果要检查返回的ith 元素是否等于something,请执行以下操作:

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

【讨论】:

  • @Cooper,如果它解决了您的问题,您可以随时接受它
  • 我正在尝试测试您的解决方案,但现在遇到了另一个输入问题并试图解决它。我一定会回来的。到目前为止,当我将字节传递给get_objects(b'bla bla') 时,当我尝试迭代时,我以某种方式在里面得到了一个整数(上面的第 11 行)。错误发生在第 13 行,它说int has no attribute .decode
猜你喜欢
  • 1970-01-01
  • 2021-09-27
  • 2012-01-25
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
相关资源
最近更新 更多