[英]Remove/overwrite import
我正在嘗試使用unittest
為介紹CS類設置一個評分腳本。 本質上,學生提交一個python文件student.py
,其中包含一些通常相互依賴的函數(意味着func3()
可能在其計算中使用func1()
)。
我正在為每個方法編寫單元測試,方法是將student.func1
的輸出與correct.func1
的輸出進行比較,該方法已知是正確的實現方法(來自文件correct.py
)。
舉個例子,假設func2
在它的計算中使用了func1
。 因此,默認情況下或者在student.func1
未通過某些測試時,我想用correct.func1
覆蓋student.func1
,因此student.func2
使用已知的正確實現(因此默認情況下不是錯誤的)。 我怎么能這樣做呢? 似乎setUp()
和tearDown()
類似於我想要的,但我不知道如何在python中“unmport”模塊,到目前為止還沒有找到任何關於它的資源。
我對student.py
包含類, func1
, func2
是特定類的方法,以及func1
和func2
通常只在student.py
定義的情況感興趣。
最簡單的方法是將student
導入您的模塊,然后在測試失敗時捕獲AssertionError
,並用您自己的好代碼替換學生模塊中的錯誤代碼:
import student
import unittest
def safe_f1():
print("Safe f1")
return 1
class TestSomething(unittest.TestCase):
def test_f1(self):
try:
self.assertEqual(student.func1(), 1)
except AssertionError:
student.func1 = safe_f1
raise
def test_f2(self):
self.assertEqual(student.func2(), 2)
這是一個失敗/工作的虛擬student.py:
def func1():
print("Bad f1")
return 2
def func2():
return func1() + 1
return 2
當我運行這個時,我得到:
$ python -m unittest test.py
Bad f1
FSafe f1
.
======================================================================
FAIL: test_f1 (test.TestSomething)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/Users/austin/Code/so/test.py", line 13, in test_f1
self.assertEqual(student.func1(), 1)
AssertionError: 2 != 1
----------------------------------------------------------------------
Ran 2 tests in 0.001s
FAILED (failures=1)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.