0

How to disable decorator during project unittests in Python?

When running the unittests, I would like to disable the selected decorator for the duration of the tests.

import unittest
import functools


def handle_value_error(func):
    @functools.wraps(func)
    def wrapper_handle_value_error():
        try:
            return func()
        except ValueError as e:
            print(f"During calling {func.__name__!r} an error was raised: {str(e)}")
    return wrapper_handle_value_error


@handle_value_error
def func_that_raise_value_error():
    # do something
    raise ValueError


def disable_decorator_for(func, decorator):
    # do something that disable handle_value_error decorator
    pass


class TestFunc(unittest.TestCase):
    def test_func_that_raise_value_error(self):
        disable_decorator_for(func=func_thar_raise_value_error, decorator=handle_value_error)
        with self.assertRaises(ValueError):
            func_thar_raise_value_error()

When function disable_decorator_for() is called, the tests should pass, but the output is:

During calling 'func_thar_raise_value_error' an error was raised: 

Failure
Traceback (most recent call last):
  File "...\disable_decorator_for_unittests.py", line 29, in test_func_thar_raise_value_error
    with self.assertRaises(ValueError):
AssertionError: ValueError not raised



Ran 1 test in 0.003s

FAILED (failures=1)

Process finished with exit code 1
flow_7777
  • 21
  • 2

0 Answers0