2016-12-22 2 views
0

私は、[X、Y]モックraw_inputパイソン

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( "コピーエントレCOM O勇気ドX:") KeyboardInterrupt

答えて

2

あなたが正常にモックに使用するものは何でも施設使用__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() 
+0

は、あなたがこののいくつかの例を提供することはできますか? –

+0

@PythonMaster - 簡単な例を追加しました。 – mgilson