我試圖單元測試訪問遠程服務的python代碼。我使用python 2.7的PyUnit。用戶輸入密碼的Python單元測試
在setUpClass
方法中,代碼提示用戶輸入服務的密碼。我想保留所有的模塊,所以我爲每個正在測試的類創建了單獨的單元測試類。這些類都訪問相同的遠程服務,並且它們都使用一個超類的setUpClass
方法的單個定義。
我的問題是,我不得不重新輸入密碼多次(每個測試課一次)。我很懶。我只想爲所有單元測試輸入一次密碼。我可以通過在單元測試中對密碼進行硬編碼來避免這個問題,但這是一個糟糕的主意。另一種選擇是將所有東西都推到一個來自unittest.TestCase
的巨大類中,但我想避免這種路由,因爲我喜歡模塊化。
下面的代碼是如何構成的:
import unittest
from getpass import getpass
class TestCommon(unittest.TestCase):
@classmethod
def setUpClass(cls):
pwd = getpass()
class test_A(TestCommon):
# ...individual unit tests for class A
class test_B(TestCommon):
# ...individual unit tests for class B
在這個例子中,我將不得不輸入密碼兩次:一次爲A
類和一次B
類。
任何人都有安全的方式建議我在單元測試運行開始時進行一次性密碼輸入嗎?謝謝!
當我運行命令'python -m unittest discover'時,我得到兩次提示輸入密碼的提示。是否因爲我在超類中定義了setUpClass()?我應該像你的示例代碼重寫它嗎? – RobotNerd
@RobotNerd,你如何訪問子類中的密碼? – falsetru
@RobotNerd,如果您在子類中以「self.pwd」或「TestCommon.pwd」的形式訪問密碼,則只需重寫TestCommon部分即可。 – falsetru