[英]Weird behavior of assertRaises (TestCase)
我一直在尝试/学习Python中的单元测试工作,并且遇到了这种奇怪的行为,我在做错什么吗?
类
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是一个数字,因此不会引发TypeError
因此第二个assertRaises
测试是否应该失败? 相反,它说确定。
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")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.