gpt4 book ai didi

python - 我的 python 代码中的一种方法对于某些单元测试失败。我该如何改进它?

转载 作者:太空宇宙 更新时间:2023-11-03 11:50:27 24 4
gpt4 key购买 nike

我的 common.py

中有一个名为 str_to_hex 的方法
def str_to_hex(self, text):
self.log.info('str_to_hex :: text=%s' % text)
hex_string = ''
for character in text:
hex_string += ('%x' % ord(character)).ljust(2, '0')
self.log.info('str_to_hex; hex = %s' % hex_string)
return hex_string

我写的单元测试方法是

def test_str_to_hex(self):
# test 1
self.assertEqual(self.common.str_to_hex('test'), '74657374');
# test 2
self.assertEqual(self.common.str_to_hex(None) , '')
# test 3
self.assertEqual(self.common.str_to_hex(34234), '')
# test 4
self.assertEqual(self.common.str_to_hex({'k': 'v'}), '')
# test 5
self.assertEqual(self.common.str_to_hex([None, 5]), '')

所以我说的第一个失败

# failure 1 (for test 2)
TypeError: 'NoneType' object is not iterable
# failure 2 (for test 3)
TypeError: 'int' object is not iterable
# failure 3 (for test 4)
AssertionError: '6b' != ''
# failure 4 (for test 5)
TypeError: ord() expected string of length 1, but NoneType found

理想情况下,只有文本(即 strunicode)应该传递给 str_to_hex

为了处理空参数作为输入,我修改了我的代码

def str_to_hex(self, text):   
# .. some code ..
for character in text or '':
# .. some code

所以它通过了第二个测试,但第三个测试仍然失败。

如果我使用 hasattr (文本,'__iter__'),它仍然会在测试 #4 和 #5 中失败。

我认为最好的方法是使用Exception。但我乐于接受建议。

请帮帮我。提前致谢。

最佳答案

首先,您需要决定是否要 (a) 为列表、字典等无效输入静默返回空字符串。或者 (b) 您实际上可以抛出适当的异常,只是希望您的测试能够处理与那些。

对于 (a),您可以让您的函数本身对传递的内容更具防御性:

def str_to_hex(self, text):
if not isinstance(text, basestring):
return ''
# rest of code

对于选项 (b),您可以更改测试期望以匹配正在发生的情况:

with self.assertRaises(TypeError):
self.common.str_to_hex(None)
# etc.

关于python - 我的 python 代码中的一种方法对于某些单元测试失败。我该如何改进它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29294917/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com