【问题标题】:How to test exception which rise in case of env absence如何测试在没有环境的情况下会出现的异常
【发布时间】:2018-01-05 18:12:09
【问题描述】:

我有一些类似的代码:

if not settings.VAR_URL: 
    raise Exception("VAR_URL is not defined") 

当我尝试像这样测试它时:

def test_for_absent_env(self):
    del os.environ['VAR_URL']
    o = Object()
    with self.assertRaises(Exception) as error:
        o.some_function()

        self.assertEqual(error.exception.message, "VAR_URL is not defined")

但它提供KeyError 而不是通过测试。我应该更正什么?

【问题讨论】:

    标签: python unit-testing environment-variables


    【解决方案1】:

    如果引发异常,您不应该采用这种方式进行测试。有一个特定的断言叫做assertRaises,可以用作上下文管理器(helps to then get the error message to check as well):

    with self.assertRaises(Exception) as error: 
        o.some_cool_function()
    
        self.assertEqual(error.exception.message, "VAR_URL is not defined")
    

    请注意,在 Python>=3.1 中可以使用 assertRaises 作为上下文管理器。

    【讨论】:

    • 谢谢!我按照您的建议更改了测试,但仍然有同样的错误
    • @EkaterinaPremudraya voobsshe ne vopros :) 错误发生在哪一行?您可以编辑问题并发布回溯吗?谢谢。
    • spasibo po svoiski))))) 它发生在 del os.environ['ENV_URL'] 行。它从 None 给出 raise KeyError(key)
    • @EkaterinaPremudraya 啊,这意味着您在os.environ 字典中没有ENV_URL 键。换句话说,没有设置环境变量。顺便说一句,你确定你需要在这里使用环境变量吗?在您展示的代码中,您只有if not settings.VAR_URL..难道您应该“修补”这个settings 对象吗?它是一个 Django 项目吗?谢谢。
    • 我希望它可以是 Django,但它是 python 脚本。 if 语句适用于用户未激活或没有环境的情况。因此,为了模仿缺少环境的情况,我将其删除
    猜你喜欢
    • 2021-03-25
    • 2017-06-15
    • 2018-07-08
    • 2016-08-09
    • 1970-01-01
    • 2015-07-11
    • 2021-12-26
    • 1970-01-01
    • 2017-11-13
    相关资源
    最近更新 更多