理想的情況下,該模塊script.py
包含一個函數main()
當你調用script.py
作爲腳本被調用,與通常的成語
import sys
def main(arg1, arg2, arg3):
print(arg1, arg2, arg3)
return 42
if __name__ == "__main__":
main(*sys.argv[1:])
在這種情況下,你可以簡單地導入功能main
並做測試沒有所有的子麻煩:
from script import main as testsubject
assert testsubject(1, 2, 3) == 42
如果script.py
不是在Python搜索路徑,您可能需要手動添加:
import sys
sys.path.append("/path/to/folder/containing/script.py")
from script import main
有一個名爲unittest
作爲標準庫的一部分,專門用於檢測這樣的功能,具有可讀的文檔包,所以我強烈建議你給一個嘗試。
隨着uittest
,測試可能是這樣的:
import unittest
import script
class Test_Script(unittest.TestCase):
def test_return_value(self):
answer = script.main(1, 2, 3)
self.assertEqual(answer, 42)
if __name__ == "__main__":
unittest.main()
編輯補充:
如果你的函數沒有返回值,所有你想知道的是你的函數是否拋出例外,你的測試功能,可以簡單地寫成像
def test_runs_without_exception(self):
script.main(1, 2, 3)
如果script.main()
引發異常,則unittest
將捕獲該異常並打印相應的失敗消息。
如果你想要做的就是簡單地測試了一個腳本,使用unittest
可能是矯枉過正,你可以逃脫也許是一個簡單的
import time
import script
try:
sript.main(1, 2, 3)
except Exception as e:
print("An Exception occured!")
with open("script_log.txt", "a") as logfile:
logfile.write(str(time.time()) + "\t" + str(e))
raise e
else:
print("Everything is fine.")
如果你有超過script.py
控制,你可能希望直接在script.py
中包含一些日誌功能。在這種情況下,您可能需要查看包logging
。
問題是我的函數什麼都沒有返回。它只是打印大量的信息。所以我不需要檢查平等;我想確保沒有例外 –
擴大了答案,以包含沒有返回值的函數的情況。 – Jan