首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在模拟类时,如何区分静态方法和实例方法?

在模拟类时,如何区分静态方法和实例方法?
EN

Stack Overflow用户
提问于 2015-03-05 21:30:04
回答 1查看 38关注 0票数 1

我在生产中遇到了一个bug,尽管它应该通过单元测试进行测试。

代码语言:javascript
复制
class Stage2TaskView(MethodView):
    def post(self):
        json_data = json.loads(request.data)
        news_url_string = json_data['news_url_string']
        OpenCalais().generate_tags_for_news(news_url_string) // ?
        return "", 201

这曾经是静态的:

代码语言:javascript
复制
OpenCalais.generate_tags_for_news(news_url_string)

但后来我改变了方法,去掉了静态装饰器。但我忘了把这句话改成

代码语言:javascript
复制
OpenCalais().generate_tags_for_news(news_url_string)

不过,测试看不见。我以后怎么测试这个?

代码语言:javascript
复制
@mock.patch('news.opencalais.opencalais.OpenCalais.generate_tags_for_news')
def test_url_stage2_points_to_correct_class(self, mo):
    rv = self.client.post('/worker/stage-2', data=json.dumps({'news_url_string': 'x'}))
    self.assertEqual(rv.status_code, 201)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-06 12:57:01

自噬是你的油炸!在修补程序中使用autospec=True将检查完整的签名:

代码语言:javascript
复制
class A():
    def no_static_method(self):
        pass

with patch(__name__+'.A.no_static_method', autospec=True):
    A.no_static_method()

将引起一个例外:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/home/damico/PycharmProjects/mock_import/autospec.py", line 9, in <module>
    A.no_static_method()
TypeError: unbound method no_static_method() must be called with A instance as first argument (got nothing instead)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28888112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档