如何对使用Flask的app.logger的函数进行单元测试

时间:2018-06-15 09:15:38

标签: python unit-testing logging flask pytest

我确实在Flask和单元测试集成(或者可能是记录器配置)中遗漏了一些东西

但是当我试图对一些有app.logger的类方法进行单元测试时,我遇到了RuntimeError: working outside of the application context的问题

这是一个实际的例子:

utils.py

import boto3
from flask import current_app as app

class CustomError(BaseException):
    type = "boto"

class BotoManager:
    def upload_to_s3(self, file):
        try:
            # do something that can trigger a boto3 error
        except boto3.exceptions.Boto3Error as e:
            app.logger.error(e)
            raise CustomError()  

test_utils.py

import pytest

from utils.py import CustomError, BotoManager

def test_s3_manager_trigger_error():
    boto_manager = BotoManager()
    with pytest.raises(CustomError):
        boto_manager.upload_to_s3('file.txt')  # file doesn't exist so trigger error

所以事情就是当我运行它时显示错误: RuntimeError: Working outside of application context.

因为没有创建应用程序,我没有使用该应用程序,所以有道理。

所以我只看到两种可能的解决方案(剧透我不喜欢其中任何一种):

  • 不要在视图之外用app.logger记录任何内容(我想我可以使用python日志记录系统,但这不是理想的行为)
  • 请勿对使用app.logger
  • 的部件进行单元测试

有人已经面临这个问题吗?你是怎么解决的?还有其他可能的解决方案吗?

0 个答案:

没有答案