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)
添加回答
举报