我对编程很陌生,并且在python中实现了一个onlinestore,具有许多不同的特性。
提交要求之一是显示测试的证据,我已经阅读过python中的单元测试,我只是想知道当函数没有明确的答案时,您是如何构造测试的,例如,我有一个函数返回mysql数据库中的所有产品,如下所示。
class TestSum(unittest.TestCase):
def test_get_all_products(input):
connection = get_sql_connection()
cursor = connection.cursor()
if input:
query = ("SELECT * FROM `online-store`.product WHERE name like
'%"+input+"%';")
else:
query = ("SELECT * FROM `online-store`.product;")
cursor.execute(query)
response = cursor.fetchall()
for row in response:
print ("Id=",row[0],"\t","Name=",row[1] , "\t","Price =£",row[2],"\t","
Supplier",row[4])
return response我想知道如何测试这个函数,语法应该是
发布于 2021-10-26 04:21:33
创建一个setUpClass方法.
创建一个删除数据库的tearDownClass方法。
如果您的任何测试将修改数据库,请使用setUp和tearDown而不是setUpClass和tearDownClass。
创建一组测试方法,讲述函数应该如何运行的故事。根据你的功能,这是一个让你开始的清单.
<代码>H 121当输入匹配时,例如表中的5项.H 222f 223
对于每个测试方法,请为输入选择一个特定值,以便根据测试数据预测函数的结果。
如果有任何测试更新数据库,您还需要创建一个tearDown
看起来,该函数的大部分可观察行为都在它所打印的内容中。所以你需要捕获stdout和可能的stderr。这可能会帮助您启动How to capture the stdout/stderr of a unittest in a variable?。
尽管如此,如果您能够控制正在测试的函数,您可能会考虑对其进行重构,以使其更易于测试。例如,将查询代码与结果的格式分隔为字符串;将字符串的打印与字符串的格式分开。就像这样..。
def get_all_products(connection, input):
results = _query_products_for_items_like(connection, input)
string = _format_query_results(result)
print(string)
def _query_products_for_items_like(connection, input):
...
return rows
def _format_query_results(results):
response_strings = []
...
return '\n'.join(response_strings)现在您可以单独测试_query_products_for_items_like和_format_query_results了。考虑到get_all_products的逻辑有多简单,您可能根本不需要测试它。
https://stackoverflow.com/questions/69706665
复制相似问题