如何在一个类的∗init廑方法中修补实例?

2024-10-01 09:19:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我在写单元测试。我该怎么修补自我确认在类MyValidator的init方法中?在我的单元测试中,我想创建一个假的自我确认并获取响应,以对中的每个元素进行断言自我确认一

class MyValidator(wsgi.Middleware):

    def __init__(self, app):
        self.app = app
        self.conf = {
            'auth_uri': CONF.someuri
            'admin_domain_name': CONF.somedomainname,
            'admin_user': CONF.someuser,
            'admin_password': CONF.get_admin_password(),
            'domain_name': CONF.somedomainname
        }

对于unittest,我正在考虑。。(我知道这是错的。。但你明白了)

^{pr2}$

该如何修补自我确认得到预期的回应?在


Tags: 方法nameselfapp元素admininitdomain
1条回答
网友
1楼 · 发布于 2024-10-01 09:19:17

即使我使用了大量的嘲笑和修补,我也不认为你的案子需要它。confMyValidator的公共属性,您只需要根据需要更改它。在

def setUp(self):
    @webob.dec.wsgify()
    def fake_app(req):
        return webob.Response()
    self.request = webob.Request.blank('/')
    self.middleware = MyValidator(fake_app)
    self.middleware.conf = {
        'auth_uri': 'testuri'
         ....
         ....
    }

在这种情况下,patch不能给您更多的东西,因为您对dict访问和进行更改的一些较小的上下文不感兴趣。如果在其他测试中需要其他值,则可以使用self.middleware.conf.update(...)或{},而不改变其他测试的行为,因为setUp()对每个测试的配置方式相同。在

如果confMyValidator的只读属性,则情况会有所不同(更好的设计)。在这种情况下,您需要对其进行修补以进行测试:

^{pr2}$

测试类应该在哪里

@mock.patch('my_module.MyValidator.conf', new_callable=PropertyMock)
def setUp(self, mock_conf):
    @webob.dec.wsgify()
    def fake_app(req):
        return webob.Response()
    self.request = webob.Request.blank('/')
    mock_conf.return_value = {
        'auth_uri': 'testuri'
         ....
         ....
    }
    self.middleware = MyValidator(fake_app)

def test_auth_uri(self):
    auth_uri = 'testuri'
    env_auth_uri = self.request.environ.get('auth_uri', None)
    self.assertEqual(auth_uri, env_auth_uri)

补丁__init__()在极少数情况下很有用。例如,__init__做了一些工作,需要在测试环境中无法使用或不会使用的资源。例如init尝试访问数据库、使用网络资源、启动新线程等等。在

相关问题 更多 >