【问题标题】:How to write python unittest case for except block which just uses a logger statement如何为只使用记录器语句的块编写python单元测试用例
【发布时间】:2021-12-21 02:26:46
【问题描述】:

芹菜任务代码:

import logging

from celery_once import QueueOnce
from celery import shared_task, current_task
from test.set_data import set_data_in_db

logger = logging.getLogger("celery")


@shared_task(base=QueueOnce, once={"graceful": True}, ignore_result=False)
def set_data_task():
    try:
        logger.info("Set data in db initiated")
        set_data_in_db(value=None)

    except Exception:
        logger.error("data could not be set", exc_info=True)

我的单元测试案例涵盖了 try 块中的所有内容。如何强制我的单元测试也覆盖除了块?

【问题讨论】:

    标签: python django pytest python-unittest python-unittest.mock


    【解决方案1】:

    当您调用方法 set_data_task 时,可能只有两种情况中的一种,方法正常执行(尝试块)或抛出异常(块除外)。

    如果你需要测试你的 except 块,你需要配置你的方法来抛出异常,以便它可以在你的测试中被捕获和断言

    你需要配置set_data_in_db方法来抛出异常被捕获

    关于测试异常,可以阅读pytest.raises

    【讨论】:

    • set_data_task 函数是使用 django celery beat 安排的周期性任务。这个函数只会执行set_data_in_db 任务,除了块只是为了记录错误以防任务失败。我不想提出任何例外。
    • 如果你不会提出任何异常,那么你将如何测试它?你必须提出异常来测试它
    猜你喜欢
    • 2021-11-01
    • 1970-01-01
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多