为了账号安全,请及时绑定邮箱和手机立即绑定

使用用户输入验证对方法进行单元测试

使用用户输入验证对方法进行单元测试

隔江千里 2021-09-11 10:57:07
我有一种方法可以接受用户输入并验证它们,直到他们输入正确的值。我不确定如何为此方法编写单元测试,因为它已经验证了用户输入。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')
查看完整描述

1 回答

?
婷婷同学_

TA贡献1844条经验 获得超8个赞

您可以使用mock来模拟 Python 中的 raw_input,并且可以通过重定向sys.stdout到StringIO. 这样你就可以模拟你的函数输入并测试无效和有效的情况:


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()


查看完整回答
反对 回复 2021-09-11
  • 1 回答
  • 0 关注
  • 177 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信