Mock在Python 2.x.x中提示输入用户名和密码凭据

时间:2017-07-11 22:35:44

标签: python unit-testing mocking

我正在尝试在python中编写一个测试用户名和密码条目的单元测试。我正在使用提示输入用户名和密码。

我有两个单独的功能,提示用户输入用户名和密码。这两个函数然后检查长度。如果密码长度为零,密码函数还会检查我们所做的异常。他们是否可以模仿这些例外?

我很挣扎,因为我可以通过用户名提示,但pytest脚本在用户名输入后保留。有没有办法模拟用户名和密码?

我是python的新手,我查看了文档,但我看到的一切通常都是Python 3.x.x,我们目前还没有实现。任何帮助将不胜感激。

我认为 init 功能实际上是导致我遇到的大部分麻烦。有办法解决这个问题吗?

class Login(object):
    def __init__(self, args, env="test"):
       created_token = self.login()

    def login(self):

        username = self.args.username
        if len(username) == 0:
            username = self._get_username()

        password = self.args.password
        if len(password) == 0:
            password = self._get_password(username)

    def _get_username(self):
        return prompt('%s Username (%s): ' % (self.domain)

    def _get_password(self):
        if password is None:
             password = prompt_sensitive('%s Password: ' % self.domain)
         try:
         except ParseError,e:
              print "ParseError message"
         except ClientError,e:
              print "ClientError message"

1 个答案:

答案 0 :(得分:0)

您可以使用依赖注入来注入提示。

def password_function(input_func=None):
   input_func = input_func or input
   ...

def test_password_function(self, ...):
   fake_input = Mock()
   ...
   result = password_function(fake_input)

由于前一个呼叫签名有效,因此不会破坏现有代码。例如password_function()。但是,如果您无权更改代码,则可以修补input函数。

import __builtin__

@mock.patch(__builtins__, 'input', return_value=...)
def test_password_function(self, mock_input):