在Python中测试,制作没有引号的列表

时间:2015-10-04 10:42:44

标签: 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 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>']

如何定义列表以使元素没有引号。

3 个答案:

答案 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正常工作,并且它们的输出必须与字符串的格式相匹配。

有关strrepr的更多信息,请参阅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)

尝试比较:

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

并检查 repr 方法here