2 回答

TA貢獻1829條經驗 獲得超7個贊
你的測試有兩個問題。
首先,你input
在你的feedback
函數中使用,這將停止測試,直到你輸入一個鍵。你可能應該嘲笑input
. 此外,您可能會認為調用input
不屬于setFeedback
(參見@chepner 的評論)。
其次,from main import *
在這里不起作用(除了樣式不好),因為這樣您在測試模塊中創建全局變量的副本 - 變量本身的更改不會傳播到副本。您應該改為導入模塊,以便訪問模塊中的變量。
第三(這取自@chepner 的答案,我錯過了),您必須確保變量在測試開始時處于已知狀態。
這是應該工作的:
import unittest
from unittest import mock
import main # importing the module lets you access the original global variable
class TestMain(unittest.TestCase):
def setUp(self):
main.feedback = False # make sure the state is defined at test start
@mock.patch('main.input') # patch input to run the test w/o user interaction
def test_setFeedback(self, mock_input):
self.assertFalse(main.feedback)
main.setFeedback('y')
self.assertTrue(main.feedback)

TA貢獻1921條經驗 獲得超9個贊
你不需要嘲笑任何東西;您只需要在運行每個測試之前確保全局變量處于已知狀態即可。此外, using在您的測試模塊中from main import *創建一個新的全局命名,與修改不同。feedbackmain.feedbacksetFeedback
import main
class TestMain(unittest.TestCase):
def setUp(self):
main.feedback = False
def test_setFeedback(self):
self.assertFalse(feedback)
main.setFeedback('y')
self.assertTrue(feedback)
添加回答
舉報