【发布时间】:2019-04-11 15:03:54
【问题描述】:
我想测试基于其他人创建的 API 的代码,但我不知道该怎么做。
我已经创建了一些函数来将 json 保存到文件中,所以我不需要在每次运行测试时发送请求,但我不知道如何使它在原始(检查)函数需要的情况下工作一个输入 arg (problem_report),它是 API 提供的某个类的一个实例,它有这个 problem_report.get_correction(corr_link) 方法。我只是想知道这是否是我编写错误代码的标志,因为我无法为此编写测试,或者我应该在我的测试文件中重写这个函数,就像我在下面提供的代码末尾显示的那样。
# I to want test this function
def check(problem_report):
corrections = {}
for corr_link, corr_id in problem_report.links.items():
if re.findall(pattern='detailCorrection', string=corr_link):
correction = problem_report.get_correction(corr_link)
corrections.update({corr_id: correction})
return corrections
# function serves to load json from file, normally it is downloaded by API from some page.
def load_pr(pr_id):
print('loading')
with open('{}{}_view_pr.json'.format(saved_prs_path, pr_id)) as view_pr:
view_pr = json.load(view_pr)
...
pr_info = {'view_pr': view_pr, ...}
return pr_info
# create an instance of class MyPR which takes json to __init__
@pytest.fixture
def setup_pr():
print('setup')
pr = load_pr('123')
my_pr = MyPR(pr['view_pr'])
return my_pr
# test function
def test_check(setup_pr):
pr = setup_pr
checked_pr = pr.check(setup_rft[1]['problem_report_pr'])
assert checker_pr
# rewritten check function in test file
@mock.patch('problem_report.get_correction', side_effect=get_corr)
def test_check(problem_report):
corrections = {}
for corr_link, corr_id in problem_report.links.items():
if re.findall(pattern='detailCorrection', string=corr_link):
correction = problem_report.get_correction(corr_link)
corrections.update({corr_id: correction})
return corrections
我不确定我是否提供了足够的代码和解释来理解问题,但我希望如此。我希望你能告诉我这是否正常,某些函数很难测试,如果这是单独重写它们的好习惯,那么我可以在测试函数中模拟函数。我也在想我可以编写具有类似功能的新类,但是 API 非常大,而且过程会很长。
【问题讨论】:
标签: python python-3.x unit-testing pytest