簡體   English   中英

Python read_text() 添加額外的字符串

[英]Python read_text() adding extra strings

我創建了一個函數,該函數接收帶有動態 SQL(和參數)的文件,然后返回最終的 SQL 結果。 它似乎添加了額外的字符串,因為我的單元測試失敗並且它顯示了額外的字符串。

我的功能:

def file_to_sql(filename, kwargs=None):
    """Read file and return SQL statement.

    Parameters
    ----------
    filename: str
        Name of the file to read.
    kwargs : dict
        Keyword arguments to be passed into your SQL statement.
    """

    python_dir = Path('logic/extract/python3')
    python_file_path = python_dir / '{}'.format(filename)
    sql = python_file_path.read_text().format(**kwargs)

return sql

我的單元測試:

def test_python_file_with_kwargs_to_sql():
    sql = file_to_sql(filename="select_all_from_{table}.py", kwargs={
        'table': 'sandbox.test_table'
        })

    assert sql == "SELECT * FROM sandbox.test_table;"

select_all_from_{table}.py:

"SELECT * FROM {table};"

單元測試失敗消息:

================================== FAILURES ===================================
_____________________ test_python_file_with_kwargs_to_sql _____________________

    def test_python_file_with_kwargs_to_sql():
        sql = file_to_sql(filename="select_all_from_{table}.py", kwargs={
            'table': 'sandbox.test_table'
            })

>       assert sql == "SELECT * FROM sandbox.test_table;"
E       assert '"SELECT * FR....test_table;"' == 'select * from...x.test_table;'
E         - "SELECT * FROM sandbox.test_table;"
E         + SELECT * FROM sandbox.test_table;

tests\unit_tests\transform\test_preprocess.py:19: AssertionError
================ 1 failed, 2 passed, 4 skipped in 1.40 seconds ================

您的單元測試失敗有兩個原因:

  1. 您的sql字符串是大小寫混合的(“SELECT”和“FROM”是大寫),而您的比較字符串是全部小寫。

  2. select_all_from_{table}.py中的文本是雙引號,但您的比較字符串沒有雙引號。

由於read_text()將文件內容讀取為str您不需要雙引號。 從您的文件中刪除雙引號,為了好的做法,請進行不區分大小寫的測試:

sql.lower() == 'select * from sandbox.test_table'.lower()

或者只是sql.lower() == 'select * from sandbox.test_table'在這種特殊情況下就足夠了。

對於單元測試,最好對輸入和輸出保持警惕,並確保測試准確無誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM