Тест Pytest является абстрактным методом - PullRequest
1 голос
/ 20 апреля 2020

У меня есть абстрактный базовый класс с абстрактным методом.

из ab c import AB C, abstractmethod

class MyClass(ABC):

    @abstractmethod
    def my_method():
        pass

Я хочу проверить, нет ли ошибки если я создаю дочерний элемент моего абстрактного базового класса без создания этого метода.

Мой первый подход состоял в том, чтобы увидеть, возникает ли ошибка, если я создаю дочерний элемент внутри функции. Но я не получаю никакой ошибки.

from abstract_method import MyClass

def test_my_class_without_my_method_error():
    class MyChildClass(MyClass):
        def my_method_with_spelling_error():
            print("do something")

Есть ли способ проверить, является ли метод абстрактным?

1 Ответ

1 голос
/ 20 апреля 2020

Вы можете проверить этот пример.

myab c .py

from abc import ABC, abstractmethod

class MyABC(ABC):
    @abstractmethod
    def my_method():
        pass

test.py

from myabc import *

def test_function():
    class MyChild(MyABC):
        def my_method_new():
            pass
    c = MyChild()

Это вызывает ошибку (TypeError: Can't instantiate abstract class MyChild with abstract methods my_method ) на c = MyChild(). Это означает, что вы не получите ошибку, пока не создадите экземпляр класса.

...