from src.jcloud_docsgen.utils import assert_that_is_instance import pytest import types class TestType: ... TestType.__name__ = 'NOT TestType' @pytest.mark.parametrize('obj,class_or_tuple', [ (1, int), (1, (int,)), (1, str | int), (1, int | str | list), (TestType(), TestType), (None, types.NoneType), ]) def test_assert_that_is_instance(obj, class_or_tuple): assert_that_is_instance(obj, class_or_tuple) @pytest.mark.parametrize('obj,class_or_tuple,expected_exception_msg', [ (1, str, 'expected \'str\', got \'int\''), (1, (str,), 'expected \'str\', got \'int\''), (1, str | float, 'expected either \'str\' or \'float\', got \'int\''), (1, str | float | list, 'expected either \'str\', \'float\' or \'list\', got \'int\''), (1, TestType, 'expected \'NOT TestType\', got \'int\''), ]) def test_assert_that_is_instance_exceptions(obj, class_or_tuple, expected_exception_msg): with pytest.raises(TypeError) as exc_info: assert_that_is_instance(obj, class_or_tuple) assert str(exc_info.value) == expected_exception_msg