- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想对我的类进行单元测试,它位于另一个名为 client_blogger.py
的文件中。
我的单元测试文件在同一目录中。我的所有其他单元测试都有效,除非我尝试模拟我自己的方法之一。
## unit_test_client_blogger.py
import mock
import json
from client_blogger import BloggerClient, requests
Class TestProperties():
@pytest.fixture
def blog(self):
return BloggerClient(api_key='123', url='http://example.com')
@mock.patch('client_blogger._jload')
@mock.patch('client_blogger._send_request')
def test_gets_blog_info(self, mock_send, mock_jload):
""" Get valid blog info from API response. """
valid_blog_info = 'some valid json api response here'
parsed_response = json.loads(valid_blog_info)
correct_blog_id = '7488272653173849119'
mock_jload.return_value = valid_blog_info
id = self.blog().get_blog_info(parsed_response)
assert id == correct_blog_id
这里是 client_blogger.py 文件内容:
# client_blogger.py
import requests, json
class BloggerClient(object):
""" Client interface for Blogger API. """
def __init__(self, key, url):
# removed some code here for brevity
def _send_request(self, api_request):
""" Sends an HTTP get request to Blogger API.
Returns HTTP response in text format. """
# snip
def _jload(self, api_response):
""" Accepts text API response. Returns JSON encoded response. """
# snip
def get_blog_info(self):
""" Makes an API request. Returns Blog item information. """
request = '{b}/blogs/byurl?url={u}&key={k}'.format(b=self.base, u=self.url, k=self.key)
txt_response = self.send_request(request)
response = self._jload(txt_response)
return response['id']
我想在上述方法中模拟 self.send_request()
和 self._jload()
方法调用。
但是 Mock 模块报错:ImportError: No module named client_blogger
。
错误一定出在这里:
@mock.patch('client_blogger._jload')
@mock.patch('client_blogger._send_request')
为了让 mock.patch 找到我的模块或类,我尝试了很多变体。但它们都不起作用。
我试过以下方法:
@mock.patch('client_blogger.BloggerClient._jload')
@mock.patch('BloggerClient._jload')
@mock.patch('._jload')
这些都不起作用。知道如何从我自己的模块中 mock.patch 一个方法吗?
(这看起来很奇怪,因为我可以 mock.patch 其他模块,而不是我自己的 :-s)
最佳答案
你想要这个:
@mock.patch('client_blogger.BloggerClient._jload')
@mock.patch('client_blogger.BloggerClient._send_request')
def test_gets_blog_info(self, mock_send, mock_jload):
""" Get valid blog info from API response. """
valid_blog_info = 'some valid json api response here'
parsed_response = json.loads(valid_blog_info)
correct_blog_id = '7488272653173849119'
mock_jload.return_value = valid_blog_info
id = self.blog().get_blog_info(parsed_response)
assert id == correct_blog_id
BloggerClient
实现来自 client_blogger
模块,因此您需要修补 client_blogger.BloggerClient
。您将其列为您尝试过但不起作用的方法之一,但我只是尝试过,对我来说效果很好。您尝试这样做时遇到了什么问题?
关于python - 如何导入自己的模块进行模拟? (导入错误 : no module named my_module!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25810793/
在我的程序中,我有一个名为 core.Module 的接口(interface)和一个实现此接口(interface)的结构,名为 my_module.MyModule。创建这些实现我的接口(inte
我正在尝试让以下行为发挥作用: from my_module import some_random_string 我的模块应该拦截它并根据some_random_string返回某些值。 我尝试设置导
此示例脚本: #!/usr/bin/perl -w while (1) { sleep(1); } 大约需要 264 kB grep -A1 heap /proc/9216/smaps 0817
我已经编写了一个自定义模块,但安装时遇到问题。这是模块的结构。 ├── my_module │ ├── .git │ │ ├── │ ├── build │ │ ├── │
好的,我将代码剥离到极少以说明问题并使其可重现 语境 : Python 3.7 没有 VENV 或有趣的东西 说话便宜。给你看代码: 代码结构: $ tree pymod/ pymod/ ├── mo
我有一个模块 my_module,它由大量文件使用: 从 my_module 导入 * 在模块里面,能知道是哪个文件导入了这个模块吗? 我想知道进行此导入的文件名:line_no。 所以我需要的代码是
我想对我的类进行单元测试,它位于另一个名为 client_blogger.py 的文件中。 我的单元测试文件在同一目录中。我的所有其他单元测试都有效,除非我尝试模拟我自己的方法之一。 ## unit_
我有一个要运行的 Python 脚本。当我从 PyCharm 中运行它时它运行没有问题,但是当我通过终端运行它时使用: python my_script.py 我得到: Traceback (most
我在 my_module 中定义了一个类 MyClass。 MyClass 有一个方法 pickle_myself 可以 pickle 相关类的实例: def pickle_myself(self,
#include #include #include #include #include #include #include #include #include #include
我是一名优秀的程序员,十分优秀!