使用Python 3.5,requests==2.18.4,Flask==0.12.2,urllib3==1.22
在我的主文件server.py中有一个名为
服务器文件定义了:
如果此方法抛出错误,则路由最终将返回
测试从测试文件中导入应用程序:
我能够测试整个应用程序的行为,并通过一个测试展示当方法返回错误时应用程序路由表现如预期,同时检查路由是否在正确位置终止:
在我的主文件server.py中有一个名为
some_method
的方法,它应该使用一些数据向某个URL进行POST
请求:def some_method(url, data):
...
error = None
try:
response = requests.post(url, json=data)
except requests.exceptions.ConnectionError as e:
...
app.logger.error(...)
response = None
error = str(e)
return error, response
服务器文件定义了:
app = Flask(__name__)
,并从@app.route(... methods=['PATCH'])
调用了some_method
方法。如果此方法抛出错误,则路由最终将返回
500
。测试从测试文件中导入应用程序:
import server
和app = server.app
,使用unittest
和导入mock.patch
。我能够测试整个应用程序的行为,并通过一个测试展示当方法返回错误时应用程序路由表现如预期,同时检查路由是否在正确位置终止:
class ServerTestCase(unittest.TestCase):
...
@patch('server.some_method')
def test_route_response_status_500_when_throws(self, mock_response):
mock_response.return_value = 'some_error_string', None
response = self.app.patch(some_url, some_data, content_type='application/json')
self.assertEqual(response.status_code, 500)
然而,我希望有另一个测试来独立测试some_method
:
- 模拟
requests.post
抛出requests.exceptions.ConnectionError
- 证明该方法记录了一个错误(我知道我可以模拟我的
app.logger
并在执行期间断言它是否已记录)
requests.post
,并且可以通过设置side_effects
属性使模拟引发异常。 - Martijn Pieters