首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python中的结构单元测试

python中的结构单元测试
EN

Stack Overflow用户
提问于 2021-10-25 10:45:45
回答 1查看 22关注 0票数 0

我对编程很陌生,并且在python中实现了一个onlinestore,具有许多不同的特性。

提交要求之一是显示测试的证据,我已经阅读过python中的单元测试,我只是想知道当函数没有明确的答案时,您是如何构造测试的,例如,我有一个函数返回mysql数据库中的所有产品,如下所示。

代码语言:javascript
复制
    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

我想知道如何测试这个函数,语法应该是

EN

回答 1

Stack Overflow用户

发布于 2021-10-26 04:21:33

创建一个setUpClass方法.

  1. 创建一个空数据库并将其填充到特定的数据中。
  2. 创建被测试的系统(sut),给它一个对连接(连接字符串,或者连接对象本身)的引用。将sut存储在类变量中,以便测试可以访问它。

创建一个删除数据库的tearDownClass方法。

如果您的任何测试将修改数据库,请使用setUptearDown而不是setUpClasstearDownClass

创建一组测试方法,讲述函数应该如何运行的故事。根据你的功能,这是一个让你开始的清单.

  • 当输入为None .
  • 当输入不是None .
  • 当输入与表中的任何项匹配时.
  • 当输入匹配表中的某一项时.

<代码>H 121当输入匹配时,例如表中的5项.H 222f 223

对于每个测试方法,请为输入选择一个特定值,以便根据测试数据预测函数的结果。

如果有任何测试更新数据库,您还需要创建一个tearDown

看起来,该函数的大部分可观察行为都在它所打印的内容中。所以你需要捕获stdout和可能的stderr。这可能会帮助您启动How to capture the stdout/stderr of a unittest in a variable?

尽管如此,如果您能够控制正在测试的函数,您可能会考虑对其进行重构,以使其更易于测试。例如,将查询代码与结果的格式分隔为字符串;将字符串的打印与字符串的格式分开。就像这样..。

代码语言:javascript
复制
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的逻辑有多简单,您可能根本不需要测试它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69706665

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档