我正在尝试在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>
两者的输出。
>>> pprint(yt.get_videos())
[<Video: MPEG-4 Visual (.3gp) - 144p - Simple>,
<Video: MPEG-4 Visual (.3gp) - 240p - Simple>,
<Video: Sorenson H.263 (.flv) - 240p - N/A>,
<Video: H.264 (.mp4) - 360p - Baseline>,
<Video: H.264 (.mp4) - 720p - High>,
<Video: VP8 (.webm) - 360p - N/A>]
下面的列表我是由我自己组建的。
>>> pprint(videos)
['<Video: MPEG-4 Visual (.3gp) - 144p - Simple>',
'<Video: MPEG-4 Visual (.3gp) - 240p - Simple>',
'<Video: Sorenson H.263 (.flv) - 240p - N/A>',
'<Video: H.264 (.mp4) - 360p - Baseline>',
'<Video: H.264 (.mp4) - 720p - High>',
'<Video: VP8 (.webm) - 360p - N/A>']
如何定义列表以使元素没有引号。
答案 0 :(得分:0)
第一个是对象列表,第二个是字符串列表。
转换其中一个以使它们匹配。
最简单的方法是在测试中转换它们:
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
的更多信息,请参阅this SO QA。
答案 1 :(得分:0)
你打算在考试中检查什么?视频是相同的(可能不太可能取决于它们的生成方式 - 即使看起来相同的视频可能不同,只有一个像素在一帧中略有颜色会有所不同)或者只有它们的字符串表示相同?
对于第一种情况,您需要有一个视频对象列表,而不仅仅是它们的字符串表示。
对于更简单的第二种情况,您不希望将self.videos
转换为“没有引号的数组”。你想转换第一个,如:
self.assertEqual([str(v) for v in self.yt.get_videos()], self.videos)
请注意,这只会检查字符串表示是否匹配。例如,第一个只是检查它是MPEG-4 gp3视频,但不是它的内容实际匹配。
答案 2 :(得分:0)