【发布时间】:2021-06-22 07:29:03
【问题描述】:
我有以下烧瓶应用程序。
# app.py
from flask import Flask, request
from predict import query_sku
app = Flask(__name__)
@app.route("/predict", methods=["POST"])
def predict():
content = request.json
max_results = content["resultSize"]
input_sku_list = content["sku"]
skus = query_sku(input_sku_list, max_results)
return {"sku": skus}
if __name__ == "__main__":
app.run()
我使用pytest 为它编写了一个单元测试,并尝试使用unittest.mock 模拟query_sku 函数。
import sys
from unittest.mock import Mock
import pytest
import app
def test_api_mocked_model():
sys.modules["predict"] = Mock()
from predict import query_sku
query_sku.return_value = "dummy"
with app.app.test_client() as client:
response = client.post('/predict', json={"resultSize":10,"sku": "x"}).json
assert response == {"sku": "dummy"}
del sys.modules['predict']
但我无法在请求中模拟该函数。它只是给出了以下断言错误。
> assert response == {"sku": "dummy"}
E AssertionError: assert None == {'sku': 'dummy'}
E +None
E -{'sku': 'dummy'}
tests/unit_tests/test_api.py:34: AssertionError
我怎样才能让它工作?
[编辑]
我在下面的query_sku 函数中添加了。有意返回一个与 Mock 函数 return_value 不同的值。
# predict.py
def query_sku(input_sku_list, topn):
return "actual function"
但是单元测试仍然是从实际函数中查询,如下图。
assert response == {"sku": "dummy"}
E AssertionError: assert {'sku': 'actual function'} == {'sku': 'dummy'}
E Differing items:
E {'sku': 'actual function'} != {'sku': 'dummy'}
【问题讨论】:
标签: python unit-testing flask mocking