簡體   English   中英

忽略 python 單元測試用例中的記錄器 function

[英]Ignore logger function in python unit test case

我正在為幾個 python 程序編寫測試用例。 我使用了自定義記錄器 function。

logger.info("Some text")
logger.error("some text")

現在記錄器是從其他程序創建的 object。 我有一個程序為“logger_1.py”,我正在將程序導入當前程序中以創建記錄器 object。

from logger_1 import getlogger

global logger
logger = getlogger("addaccess", "_log)

在我的單元測試用例中,我沒有定義記錄器。

如何跳過以 logger 開頭的 function 中經過單元測試的語句,或者我可以以任何其他方式模擬或修補程序的 function 中的所有 logger 語句?

我看到了三個選項:

  1. 不要改變任何東西。 讓記錄器記錄並忽略它產生的任何 output。 無論如何,開發/測試/暫存環境都應該記錄到非生產系統,因此 output 應該能夠不假思索地丟棄。 為了完整起見,我主要包括此選項,但對於小型或不重要的系統,這是一個有效的解決方案。 在您的情況下,這也不起作用,因為logger_1.py在測試期間似乎不可用。

  2. 更改創建記錄器的代碼,或者在這種情況下從另一個地方導入它,以便它使用不同的、特定於測試的記錄器和 output 位置。 不過,捕捉該執行環境(命令行、導入等)可能有點棘手。 例如在我們的系統中,我們通常包括一個

    if __name__ == "__main__": #do something with logger

    塊,以便如果從命令行調用文件而不是導入到測試套件中,記錄器會指向其他地方。

  3. 您可以使用虛擬記錄器模擬每個測試方法的記錄器:

     from unittest import mock, TestCase create_dummy_logger(): #create and return a dummy logger pass SomethingTests(TestCase): @mock.patch("getlogger", create_dummy_logger) test_method_that_logs_something(self): pass

暫無
暫無

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

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