在Python中测试,生成不带引号的列表

在Python中测试,生成不带引号的列表,python,python-2.7,Python,Python 2.7,我正在尝试用python实现unittest。我有一份清单需要核实 所以我会 self.assertEqual(self.yt.get_videos(), self.videos) 错误: AssertionError: Lists differ: [<Video: MPEG-4 Visual (.3gp) ... != ['<Video: MPEG-4 Visual (.3gp)... First differing element 0: <Video: MPEG-4 V

我正在尝试用python实现unittest。我有一份清单需要核实

所以我会

self.assertEqual(self.yt.get_videos(), self.videos)
错误:

AssertionError: Lists differ: [<Video: MPEG-4 Visual (.3gp) ... != ['<Video: MPEG-4 Visual (.3gp)...

First differing element 0:
<Video: MPEG-4 Visual (.3gp) - 144p - Simple>
<Video: MPEG-4 Visual (.3gp) - 144p - Simple> 

AssertionError:Lists different:[第一个是对象列表,第二个是字符串列表

转换其中一个以使其匹配

可能最简单的方法是在测试中转换它们:

self.assertEqual([str(el) for el in self.yt.get_videos()], self.videos)
或者,正如@Peter Wood指出的那样

self.assertEqual(map(str, self.yt.get_videos()), self.videos)
当然,您需要在类中定义
str
/
repr
方法,以便
str
工作,并且它们的输出必须与字符串的格式匹配


有关
str
repr
的更多信息,请参阅您在测试中试图检查什么?视频是否相同(可能不太可能,取决于它们生成的方式-即使看起来相同的视频也可能不同,一帧中只有一个像素的颜色稍有不同)或者只有它们的字符串表示形式相同

对于第一种情况,您需要一个视频对象列表,而不仅仅是它们的字符串表示

对于更简单的第二种情况,您不希望将
self.videos
转换为“不带引号的数组”。您希望转换第一种情况,如:

self.assertEqual([str(v) for v in self.yt.get_videos()], self.videos)
请注意,这将只检查字符串表示是否匹配。例如,第一个检查将只检查它是否是MPEG-4 gp3视频,而不是它的内容是否实际匹配。

尝试比较:

self.assertEqual([str(el) for el in self.yt.get_videos()], self.videos)

并检查repr方法

添加
类型(yt.get\u videos()[0])的输出
第一个是对象列表,第二个是字符串列表。将两者之一转换为匹配
映射(str,yt.get\u videos())
除非这是对
\uuu repr\uuuu
实现的测试,否则这似乎是个坏主意。您应该检查对象的实际属性值。
self.assertEqual([str(v) for v in self.yt.get_videos()], self.videos)
self.assertEqual([str(el) for el in self.yt.get_videos()], self.videos)