我正在尝试测试应该失败的http调用,但我想返回一个值。但是我没有通过测试:
def callAPI(self, tokenURL:str):
requestBuilder: RequestBuilder = RequestBuilder()
try:
response = requestBuilder.get(tokenURL)
return response.json()
# return "content"
except Exception as err:
Logger.error("An error occured while trying to call API "+ err)
return None
这是我的测试功能:
@responses.activate
def testCallDemFails():
responses.add(
responses.GET, 'http://calldem.com/api', json="{'err'}", status=500)
with pytest.raises(Exception):
demConfig = DemConfig()
resp = demConfig.callAPI('http://callAPI.com/api/1/foobar')
print("testCallAPIFail", resp)
assert resp == None
requestBuilder.get方法仅返回一个request.get函数。当我执行函数时,我什至不会使testAPI失败。你有什么想法吗?
答案 0 :(得分:1)
测试功能似乎没有将您正在使用的请求URL连接到期望的响应URL。 http://callAPI.com/api/1/foobar
与http://calldem.com/api
不匹配,测试响应也未配置为正则表达式匹配,该匹配将启用示例代码所隐含的子路径匹配。我猜测错误配置的URL映射返回的响应是JSON可解析的(或无),因此永远不会引发异常。
如果您尝试使用以下测试代码,它可以工作吗?:
import re
@responses.activate
def testCallDemFails():
responses.add(
responses.GET, re.compile('http://callAPI.com/api/.*'), json="{'err'}", status=500)
with pytest.raises(Exception):
demConfig = DemConfig()
resp = demConfig.callAPI('http://callAPI.com/api/1/foobar')
print("testCallAPIFail", resp)
assert resp == None