Python 在self.assertEqual签名中调用字典密钥时为什么会出现KeyError?

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:

我正在使用unittest设置一个测试类来测试一个接受JSON文件并返回字典的函数。我正在使用
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:
子句,也就是说,因为它们可以隐藏意外的异常并导致混淆。