Python 在self.assertEqual签名中调用字典密钥时为什么会出现KeyError?
我正在使用unittest设置一个测试类来测试一个接受JSON文件并返回字典的函数。我正在使用Python 在self.assertEqual签名中调用字典密钥时为什么会出现KeyError?,python,dictionary,python-unittest,Python,Dictionary,Python Unittest,我正在使用unittest设置一个测试类来测试一个接受JSON文件并返回字典的函数。我正在使用assterEqual方法执行两个测试。检查返回的类型是否确实是字典。第二个测试检查为给定键返回的值是否与我期望的值匹配。 这是我正在测试的功能: def convertToDict(file): import json try: with open(file, 'r') as f: return json.load(f) except:
assterEqual
方法执行两个测试。检查返回的类型是否确实是字典。第二个测试检查为给定键返回的值是否与我期望的值匹配。
这是我正在测试的功能:
def convertToDict(file):
import json
try:
with open(file, 'r') as f:
return json.load(f)
except:
return {}
在执行测试之前,我使用SetUp()
方法创建一个测试夹具,将以下数据写入名为test.JSON的JSON文件:
{“问候语”:“你好,世界”}
然后,我使用以下签名来测试我的函数:
def test_convertToDict(self):
self.assertEqual(type(JSONfile.convertToDict("TestFolder/test.json")), dict)
self.assertEqual(JSONfile.convertToDict("TestFolder/test.json")["Greeting"],"Hello World")
第一个测试通过,但第二个测试由于密钥错误而失败
回溯(最近一次呼叫最后一次):
文件“/home/../TestChoreHelpers.py”,第18行,在test_JSONFile中
self.assertEqual(JSONfile.convertToDict(“TestFolder/test.json”)[“问候语”],“你好世界”)
KeyError:“问候语”
我不明白为什么会出现keyrerror
写下这个问题几分钟后,我开始怀疑我的测试夹具是否不完整,因此我的converToDict()
返回一个空字典,{}
。我将继续向我的函数添加更多的错误处理来调试它。我感觉我的convertToDict()
函数找不到我在测试中通过的文件。错误在我的文本夹具中。在我将其添加到我的convertToDict()功能之后
except FileNotFoundError:
return "Could not locate file."
我发现我的函数找不到传递给它的文件,因为setUp()
和tearDown()方法的实现不正确。我用的是SetUp()
而不是SetUp()
,用TearDown()
而不是TearDown()
你能发一个帖子吗?将单元测试剥离到最低限度以重现错误。您的怀疑很可能是正确的。让我们知道结果如何:)西雷奥,我感觉你看到了错误,但想让我自己解决。查看我在解释我的解决方案时所做的其他评论。这是一个很好的例子,说明了为什么应该避免在try
中使用“bare”execpt:
子句,也就是说,因为它们可以隐藏意外的异常并导致混淆。