我想要編寫單元測試使用unittest
一些代碼:編寫單元測試:我可以在課堂級別導入我需要的所有模塊,還是必須在每次測試中再次導入它們?
https://docs.python.org/3/library/unittest.html
假設每個測試我寫需要導入math
,os
和datetime
模塊。現在,我輸入他們在每個我寫的測試:
#...code for which I'm writing the unit tests...
import unittest
class TestMyCode(unittest.TestCase):
def test_method_1(self):
# unit test for method 1
import math
import os
import datetime
.
.
def test_method_2(self):
# unit test for method 2
import math
import os
import datetime
.
.
if __name__ == "__main__":
unittest.main()
爲了避免重複代碼,是不是有可能在類級別只導入一次?這:
#...code for which I'm writing the unit tests...
import unittest
class TestMyCode(unittest.TestCase):
import math
import os
import datetime
def test_method_1(self):
# unit test for method 1
.
.
def test_method_2(self):
# unit test for method 2
.
.
if __name__ == "__main__":
unittest.main()
導致錯誤
NameError: name 'math' is not defined
因此,這顯然不是正確的做法。爲了清楚起見,我正在編寫單元測試(實際上由兩個方法組成)和(兩個)單元測試的代碼都在同一個模塊中,我們稱之爲MyCode.py
。
你爲什麼不在* module *級別導入它們? – BrenBarn
@BrenBarn好主意!事實是,我將單元測試放在包含要測試的代碼的模塊中(我不知道這是否正確:我今天剛開始這項工作,而且我不是專業程序員)。 'math'沒有被主代碼使用,但是隻能通過單元測試。所以在我看來,通過添加僅供測試使用的導入來修改我正在編寫測試的代碼時,有點「髒」。在實踐中,爲了編寫測試,我正在修改我應該測試的代碼。你怎麼看? – DeltaIV
如果您將測試代碼包含在正在測試的代碼中,那麼您已經通過向其添加了測試代碼來修改主代碼,所以我認爲不必擔心太多。如果你想讓東西在視覺上分開,你可以把單元測試導入放在模塊級別,但是在文件末尾(就在你的單元測試代碼之前,還有'import unittest')。如果您的測試代碼變得足夠大,以至於難以在同一個文件中包含所有這些代碼,那麼您應該將其移至單獨的文件中。 – BrenBarn