import abc
import inspect
from unittest.mock import MagicMock
class A(abc.ABC):
pass
class B(A):
pass
def test_sub_class():
b_class_mock = _create_class_mock(B)
print(isinstance(b_class_mock, type))
print(inspect.isclass(b_class_mock))
print(issubclass(b_class_mock, A))
def _create_class_mock(cls):
class _MockABCMeta(abc.ABCMeta):
def __getattribute__(self, name):
try:
return getattr(mock, name)
except AttributeError:
return getattr(cls, name)
mock = MagicMock(spec=cls)
return _MockABCMeta(cls.__name__, cls.__bases__, {})
test_sub_class()
aW1wb3J0IGFiYwppbXBvcnQgaW5zcGVjdApmcm9tIHVuaXR0ZXN0Lm1vY2sgaW1wb3J0IE1hZ2ljTW9jawoKY2xhc3MgQShhYmMuQUJDKToKICAgIHBhc3MKCmNsYXNzIEIoQSk6CiAgICBwYXNzCgpkZWYgdGVzdF9zdWJfY2xhc3MoKToKICAgIGJfY2xhc3NfbW9jayA9IF9jcmVhdGVfY2xhc3NfbW9jayhCKQoKICAgIHByaW50KGlzaW5zdGFuY2UoYl9jbGFzc19tb2NrLCB0eXBlKSkKICAgIHByaW50KGluc3BlY3QuaXNjbGFzcyhiX2NsYXNzX21vY2spKQogICAgcHJpbnQoaXNzdWJjbGFzcyhiX2NsYXNzX21vY2ssIEEpKQoKZGVmIF9jcmVhdGVfY2xhc3NfbW9jayhjbHMpOgogICAgY2xhc3MgX01vY2tBQkNNZXRhKGFiYy5BQkNNZXRhKToKICAgICAgICBkZWYgX19nZXRhdHRyaWJ1dGVfXyhzZWxmLCBuYW1lKToKICAgICAgICAgICAgdHJ5OgogICAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIobW9jaywgbmFtZSkKICAgICAgICAgICAgZXhjZXB0IEF0dHJpYnV0ZUVycm9yOgogICAgICAgICAgICAgICAgcmV0dXJuIGdldGF0dHIoY2xzLCBuYW1lKQoKICAgIG1vY2sgPSBNYWdpY01vY2soc3BlYz1jbHMpCiAgICByZXR1cm4gX01vY2tBQkNNZXRhKGNscy5fX25hbWVfXywgY2xzLl9fYmFzZXNfXywge30pCgp0ZXN0X3N1Yl9jbGFzcygp