使用用户输入验证对方法进行单元测试
Unit testing a method with user input validations
我有一个方法可以接受用户输入并验证它们,直到他们输入正确的值。我不确定如何为此方法编写单元测试,因为它已经验证了用户输入。
def refreshtime_validation():
while True:
try:
runtime_input = float(raw_input("Enter Refresh Time (in seconds): "))
except ValueError:
print "\n**Please enter a valid number (Must be an integer).**\n"
continue
if runtime_input <= 0:
print "\n**Please enter a valid number (Must be greater than 0).**\n"
continue
else:
return runtime_input
我如何着手为此方法编写单元测试?到目前为止我唯一的是
self.assertEquals('1','1')
self.assertEquals('100','100')
self.assertEquals('100000','100000')
您可以使用 mock to and you can 。这样你就可以模拟你的函数输入并测试无效和有效的情况:
import sys
import mock
import unittest
import StringIO
import __builtin__
# [..] your code
class Test(unittest.TestCase):
@mock.patch.object(__builtin__, 'raw_input')
def test_refreshtime_validation(self, mocked_raw_input):
my_stdout = StringIO.StringIO()
sys.stdout = my_stdout
mocked_raw_input.side_effect = ['error', '0', '1']
outputs = '\n**Please enter a valid number (Must be an integer).**\n'+\
'\n\n**Please enter a valid number (Must be greater than 0).**\n\n'
valid_value = refreshtime_validation()
sys.stdout = sys.__stdout__
self.assertEquals(my_stdout.getvalue(), outputs)
self.assertEquals(valid_value, 1)
unittest.main()
我有一个方法可以接受用户输入并验证它们,直到他们输入正确的值。我不确定如何为此方法编写单元测试,因为它已经验证了用户输入。
def refreshtime_validation():
while True:
try:
runtime_input = float(raw_input("Enter Refresh Time (in seconds): "))
except ValueError:
print "\n**Please enter a valid number (Must be an integer).**\n"
continue
if runtime_input <= 0:
print "\n**Please enter a valid number (Must be greater than 0).**\n"
continue
else:
return runtime_input
我如何着手为此方法编写单元测试?到目前为止我唯一的是
self.assertEquals('1','1')
self.assertEquals('100','100')
self.assertEquals('100000','100000')
您可以使用 mock to
import sys
import mock
import unittest
import StringIO
import __builtin__
# [..] your code
class Test(unittest.TestCase):
@mock.patch.object(__builtin__, 'raw_input')
def test_refreshtime_validation(self, mocked_raw_input):
my_stdout = StringIO.StringIO()
sys.stdout = my_stdout
mocked_raw_input.side_effect = ['error', '0', '1']
outputs = '\n**Please enter a valid number (Must be an integer).**\n'+\
'\n\n**Please enter a valid number (Must be greater than 0).**\n\n'
valid_value = refreshtime_validation()
sys.stdout = sys.__stdout__
self.assertEquals(my_stdout.getvalue(), outputs)
self.assertEquals(valid_value, 1)
unittest.main()