单元测试抽象类异常notImplementederror

时间:2019-09-09 07:23:31

标签: python unit-testing

我有一个抽象类,其中有多个@abstractmethod引发NotImplementedError("Need to implement this")

如何使用python内置的unittest设置测试用例?

我尝试使用@patch.multibyte,但不起作用。

1 个答案:

答案 0 :(得分:0)

我不知道您通过使用@patch.multibyte想要达到什么目的,但是如果您的目标是测试必须在具体类中实现抽象方法,则只需使用assertRaises。 我们假设在模块MyAbstractClass中有一个抽象类my_api.py

import abc


class MyAbstractClass(abc.ABC):

    @abc.abstractmethod
    def method_1(self):
        pass

然后,您在my_api_tests.py中编写测试:

from unittest import TestCase

from my_api import MyAbstractClass


class MyConcreteClassWithoutImplementations(MyAbstractClass):
    pass


class MyConcreteClassWithImplementations(MyAbstractClass):
    def method_1(self):
        return 1


class MyAbstractClassTest(TestCase):
    def test_cannot_instantiate_concrete_classes_if_abstract_method_are_not_implemented(self):
        self.assertRaises(TypeError, lambda:  MyConcreteClassWithoutImplementations())

    def test_can_instantiate_concrete_classes_if_abstract_method_are_implemented(self):
        error = None
        try:
            my_object = MyConcreteClassWithImplementations()
            self.assertEqual(my_object.method_1(), 1)
        except TypeError as e:
            error = e
        self.assertIsNone(error)

...但是您实际上是在测试Python的API,而不是您自己的代码,因此此类测试没有用...您必须测试自己的业务逻辑;)