我一直在尝试/学习Python中的单元测试工作,并且遇到了这种奇怪的行为,我做错了什么吗?
课程
enum
测试
class Entity:
def __init__(self, n):
if not isinstance(n, int):
raise TypeError('n must be a number.')
self.n = n
第二个from src.entity import Entity
class TestEntity(TestCase):
def test__init__types(self):
self.assertRaises(TypeError, Entity.__init__, "2")
self.assertRaises(TypeError, Entity.__init__, 2)
中的测试是否会失败,因为2是一个数字,因此不会引发assertRaises
?相反,它说确定。
答案 0 :(得分:1)
Entity.__init__(self, n)
接受两个个参数:self
和n
。您只提供了一个,就得到了TypeError
。
观察:
>>> class A:
... def __init__(self, n):
... print(n)
...
>>> A.__init__('s')
Traceback (most recent call last):
File "<string>", line 1, in <module>
TypeError: __init__() missing 1 required positional argument: 'n'
要测试构造函数,您可以执行以下操作:
with self.assertRaises(TypeError):
Entity("2")
现在,为什么会发生,并且从哪里可以得到self
的论点?问题是__init__
随此参数自动提供为A.__new__
,因此您可以自己调用A.__new__
,这将导致看起来很奇怪的代码:
self.assertRaises(TypeError, A.__new__(A).__init__, "2")