La cosa migliore è probabilmente l'iniezione di dipendenza, in modo che quello che ci si solito pick up da sys.stdin (per esempio) è in realtà un oggetto passato in Così si potrebbe fare qualcosa di simile:.
import sys
def myapp(stdin, stdout):
print >> stdout, "Hi, what's your name?"
name = stdin.readline()
print >> stdout "Hi,", name
# This might be in a separate test module
def test_myapp():
mock_stdin = [create mock object that has .readline() method]
mock_stdout = [create mock object that has .write() method]
myapp(mock_stdin, mock_stdout)
if __name__ == '__main__':
myapp(sys.stdin, sys.stdout)
Fortunatamente, Python lo rende piuttosto facile. Ecco un collegamento più dettagliato per un esempio di stocking beffardo: http://konryd.blogspot.com/2010/05/mockity-mock-mock-some-love-for-mock.html
fonte
2011-01-17 18:55:17
Infatti, l'iniezione di dipendenza è la strada da percorrere. Sebbene, per qualche strana ragione, non possa cambiare il codice, potrebbe direttamente cambiare 'stdin' e' stdout' con 'sys.stdin = mock_stdin' e' sys.stdout = mock_stdout'. Se aveva bisogno degli originali durante il test, poteva usare 'sys .__ stdin__' e' sys .__ stdout__', che mantengono i valori originali. – PaoloVictor