我有一个抽象类,其中有多个@abstractmethod
引发NotImplementedError("Need to implement this")
。
如何使用python内置的unittest
设置测试用例?
我尝试使用@patch.multibyte
,但不起作用。
答案 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,而不是您自己的代码,因此此类测试没有用...您必须测试自己的业务逻辑;)