为什么我的单元测试用例缺少要在 python 中涵盖的 if 语句?
Why is my unit test case missing the if statements to cover in python?
我已经为一个函数写了一个测试用例。该函数基本上 returns 内容类型为 text/csv 的输出。在 运行 命令 python3 -m pytest --cov-report term-missing --cov=projfolder/
之后,我得到了遗漏的行,这些行都在 if 语句中。
我对这个问题的理解是测试用例通过了但错过了 if 循环中的语句。看这个例子
func.py
@process_bp.route("/getListCSV")
def get_list_csv():
companies_flask_list = db.session.query(Companies, LeadsStatus).join(LeadsStatus,
Companies.id == LeadsStatus.company_id)
industry_sele = "All"
country_sele = "UK"
size_sele = "All"
filters = {'open': True, 'assign': True, 'closed': True}
status_list = ['open', 'allocated', 'converted', 'not converted']
if 'industry' in request.form:
industry_sele = request.form['industry']
country_sele = request.form['country']
size_sele = request.form['size']
if not request.form.get('open'):
filters['open'] = False
if 'open' in status_list:
status_list.remove('open')
if not request.form.get('assign'):
filters['assign'] = False
if 'allocated' in status_list:
status_list.remove('allocated')
if not request.form.get('closed'):
filters['closed'] = False
if 'converted' in status_list:
status_list.remove('converted')
if 'not converted' in status_list:
status_list.remove('not converted')
if 'industry' in request.args:
industry_sele = request.args.get('industry')
country_sele = request.args.get('country')
size_sele = request.args.get('size')
if request.args.get('open') == 'False':
filters['open'] = False
if 'open' in status_list:
status_list.remove('open')
if request.args.get('assign') == 'False':
filters['assign'] = False
if 'allocated' in status_list:
status_list.remove('allocated')
if request.args.get('closed') == 'False':
filters['closed'] = False
if 'converted' in status_list:
status_list.remove('converted')
if 'not converted' in status_list:
status_list.remove('not converted')
所有这些行(如果语句丢失,则在每行中)。看看我对这个功能进行单元测试的方式。 test_func.py
def test_get_list_csv_manager(self):
with self.client.session_transaction() as session:
session['role'] = 'manager'
session['id'] = 2
res = self.client.get("/getListCSV", follow_redirects=True)
self.assertEqual(res.status_code, 200)
我应该如何编写测试用例以便将这些if语句包含在其中?自 5 天以来,我一直在这个问题上陷入困境,我没有任何帮助或运气。
编辑:我是这样尝试的。
def test_get_list_csv_form_requests(self):
with self.client.session_transaction() as session:
session['role'] = 'manager'
session['id'] = 2
mock_request_data = {
'industry_sele': 'Compliance',
'country_sele': 'UK',
'size_sele': '5000'
}
res = self.client.get("/getListCSV", data=json.dumps(mock_request_data),follow_redirects=True)
self.assertEqual(res.status_code, 200)
终于找到了我这个问题的答案。
对我有用的是这段代码。
def test_request_form_csv(self):
with self.client.session_transaction() as session:
session['role'] = 'manager'
session['id'] = 2
r = self.client.get('/getListCSV', data={'industry': 'All', 'country': 'UK', 'size': 'All'})
self.assertEqual(r.status_code, 200)
我已经为一个函数写了一个测试用例。该函数基本上 returns 内容类型为 text/csv 的输出。在 运行 命令 python3 -m pytest --cov-report term-missing --cov=projfolder/
之后,我得到了遗漏的行,这些行都在 if 语句中。
我对这个问题的理解是测试用例通过了但错过了 if 循环中的语句。看这个例子
func.py
@process_bp.route("/getListCSV")
def get_list_csv():
companies_flask_list = db.session.query(Companies, LeadsStatus).join(LeadsStatus,
Companies.id == LeadsStatus.company_id)
industry_sele = "All"
country_sele = "UK"
size_sele = "All"
filters = {'open': True, 'assign': True, 'closed': True}
status_list = ['open', 'allocated', 'converted', 'not converted']
if 'industry' in request.form:
industry_sele = request.form['industry']
country_sele = request.form['country']
size_sele = request.form['size']
if not request.form.get('open'):
filters['open'] = False
if 'open' in status_list:
status_list.remove('open')
if not request.form.get('assign'):
filters['assign'] = False
if 'allocated' in status_list:
status_list.remove('allocated')
if not request.form.get('closed'):
filters['closed'] = False
if 'converted' in status_list:
status_list.remove('converted')
if 'not converted' in status_list:
status_list.remove('not converted')
if 'industry' in request.args:
industry_sele = request.args.get('industry')
country_sele = request.args.get('country')
size_sele = request.args.get('size')
if request.args.get('open') == 'False':
filters['open'] = False
if 'open' in status_list:
status_list.remove('open')
if request.args.get('assign') == 'False':
filters['assign'] = False
if 'allocated' in status_list:
status_list.remove('allocated')
if request.args.get('closed') == 'False':
filters['closed'] = False
if 'converted' in status_list:
status_list.remove('converted')
if 'not converted' in status_list:
status_list.remove('not converted')
所有这些行(如果语句丢失,则在每行中)。看看我对这个功能进行单元测试的方式。 test_func.py
def test_get_list_csv_manager(self):
with self.client.session_transaction() as session:
session['role'] = 'manager'
session['id'] = 2
res = self.client.get("/getListCSV", follow_redirects=True)
self.assertEqual(res.status_code, 200)
我应该如何编写测试用例以便将这些if语句包含在其中?自 5 天以来,我一直在这个问题上陷入困境,我没有任何帮助或运气。
编辑:我是这样尝试的。
def test_get_list_csv_form_requests(self):
with self.client.session_transaction() as session:
session['role'] = 'manager'
session['id'] = 2
mock_request_data = {
'industry_sele': 'Compliance',
'country_sele': 'UK',
'size_sele': '5000'
}
res = self.client.get("/getListCSV", data=json.dumps(mock_request_data),follow_redirects=True)
self.assertEqual(res.status_code, 200)
终于找到了我这个问题的答案。 对我有用的是这段代码。
def test_request_form_csv(self):
with self.client.session_transaction() as session:
session['role'] = 'manager'
session['id'] = 2
r = self.client.get('/getListCSV', data={'industry': 'All', 'country': 'UK', 'size': 'All'})
self.assertEqual(r.status_code, 200)