繁体   English   中英

assertRaises(TestCase)的怪异行为

[英]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)接受两个参数: selfn 您只提供了一个,并收到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM