模拟raw_input python

时间:2016-12-22 00:31:21

标签: python testing mocking

我有这个函数应该接收列表[x,y]

def input_origem():
    origem = raw_input("Entre com o valor de x: ")
    origem = eval(origem)
    return origem
def input_saida():
    destino = raw_input("Entre com o valor de y  ")
    destino = eval(destino)
    return destino


def my func(origem, destino):

..
...
code 
..
...

print  myfunc(input_origem(), input_saida())

此代码效果很好,但我不知道如何模拟此功能。

我试过这种方式:

class TEste(base.TestCase):
    @base.TestCase.mock.patch('mypath.input_origem')
    @base.TestCase.mock.patch('mypath.input_saida')
    def test_movimento_cavalo(self, origem_mock, saida_mock):
        origem_mock = self.mock.MagicMock()
        saida_mock = self.mock.MagickMock()
        myfunc(origem_mock, saida_mock)
        myfunc.should.be.equal([1,1])

但测试永远不会完成。当我取消时,我得到:

  

origem = raw_input(" Entre com o valor de x:")   一个KeyboardInterrupt

1 个答案:

答案 0 :(得分:5)

您应该能够使用通常用于模拟事物的任何设施来模拟__builtin__.raw_input

使用unittestmock的一个非常简单的示例如下所示:

import unittest
import mock
import __builtin__

def test_raw_input():
    return raw_input()

class Test(unittest.TestCase):
    @mock.patch.object(__builtin__, 'raw_input')
    def test_stuff(self, mock_raw_input):
        mock_raw_input.return_value = 7
        self.assertEqual(test_raw_input(), 7)

unittest.main()