我正在运行许多单元测试来测试二进制协议:
故障消息示例如下:
AssertionError: Items in the first set but not the second:
b'\x00\x02@=\x00'
Items in the second set but not the first:
b'\x00\x02@N\x00'
这很麻烦,因为我需要手动将ascii字符转换为十六进制以检查发生了什么。
如果可以使unittest将所有bytes
对象格式化为十六进制,那就很好了,例如
AssertionError: Items in the first set but not the second:
b'\x00\x02\x40\x3d\x00'
Items in the second set but not the first:
b'\x00\x02\x40\x4e\x00'
关于如何通过租赁努力实现这一目标的任何建议?
注意:我不仅有两个集合之间的特定比较,而且还有列表和字典之间的比较...因此,我需要一种省力的解决方案。
答案 0 :(得分:0)
好吧,我自己研究了-lallegro-static
的代码。
在内部,它使用unittest
格式化测试失败的输出。缺少重写列表,集合,字典等的所有比较例程的方法。没有容易解决的方法。
我发现最好的解决方案是将repr(obj)
对象子类化并重载其bytes
方法,如下所示:
__repr__
然后可以在测试用例中使用该对象包装结果:
class st_frame(bytes):
def __repr__(self):
return "b'{}'".format(
''.join(['\\x%02x' % c for c in self])
)