【问题标题】:Flask app.config during unit testing在单元测试期间烧瓶 app.config
【发布时间】:2016-03-20 06:23:21
【问题描述】:

处理依赖于调用代码而又依赖于当前应用配置的单元测试的最佳方法是什么?

例如

code.py

from flask import current_app

def some_method():
    app = current_app._get_current_object()
    value = (app.config['APP_STATIC_VAR'])*10
    return value

test_code.py

class TestCode(unittest.TestCase):
    def test_some_method(self):
        app = create_app('app.settings.TestConfig')
        value = some_method()
        self.assertEqual(10, value)

运行上面的测试时,执行 app = create_app('app.settings.TestConfig') 行时出现“RuntimeError:在应用程序上下文之外工作”错误。

在测试期间调用 app = create_app 并不能解决问题。在我需要在应用程序中读取配置的这种情况下,进行单元测试的最佳方法是什么?

【问题讨论】:

  • 其实你这里做的不是单元测试,而是集成测试。因此,您要么必须重构代码(例如通过配置)以允许单元测试,要么将方法应用于集成测试。这是标准答案。 But I tend to stretch unitest also 我很想知道是否有人提出了一个很酷的想法。也许mock.patching flask.current_app 左右...
  • 我要问的问题是,您到底想用不同的配置值测试什么?你的应用程序应该如何表现?另外,对于不同的应用配置,你可以使用 Flask 的test client吗?

标签: python unit-testing flask


【解决方案1】:

当您调用 some_method() 来修复它时,您正在使用在应用上下文中访问该应用,将您的调用替换为:

with app.app_context():
    value = some_method()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-15
    • 1970-01-01
    • 2021-09-07
    • 2017-12-07
    • 2018-11-09
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    相关资源
    最近更新 更多