我正在创建自己的夹具来模拟单元测试中所需的服务端点。为了拦截 HTTP 请求,我使用 requests_mock 如下:
@pytest.fixture
def sparql_endpoint(requests_mock):
yield lambda uri, initial_data: Endpoint(requests_mock, uri, initial_data)
在Endpoint.__init__
我执行以下操作:
m.post(url=uri, raw=self.handle_post)
m.get(url=uri, raw=self.handle_get)
在我的实际测试用例中,我注入端点并对其进行初始化:
def test_basic_select(my_endpoint):
repo_uri = 'https://my.rdfdb.com/repo/sparql'
rdf_files = ['tests/upper_ontology.ttl',
'tests/domain_ontology.ttl',
'tests/instance_data.ttl']
endpoint = sparql_endpoint(repo_uri, rdf_files)
实际上,它确实初始化了模拟端点,Mocker.start()
如果我在那里设置断点,我会看到被调用。但是,稍后在测试用例中我得到以下信息:
..\..\AppData\Local\Programs\Python\Python37\lib\urllib\request.py:222: in urlopen
return opener.open(url, data, timeout)
..\..\AppData\Local\Programs\Python\Python37\lib\urllib\request.py:525: in open
response = self._open(req, data)
..\..\AppData\Local\Programs\Python\Python37\lib\urllib\request.py:543: in _open
'_open', req)
..\..\AppData\Local\Programs\Python\Python37\lib\urllib\request.py:503: in _call_chain
result = func(*args)
..\..\AppData\Local\Programs\Python\Python37\lib\urllib\request.py:1360: in https_open
context=self._context, check_hostname=self._check_hostname)
E urllib.error.URLError: <urlopen error [Errno 11001] getaddrinfo failed>
..\..\AppData\Local\Programs\Python\Python37\lib\urllib\request.py:1319: URLError
因为它无法解析我给它的虚假 URL。那么,我是否以某种方式弄乱了处理程序注册,以使 Matcher 不会在那里触发请求?为什么 urlopen 仍在尝试解析主机?