私はコマンドを実行してリモートホスト上にファイルを作成するために、paramikoを使っていくつかの関数を書いています。私はそれらのためのいくつかの単体テストを書いてみたいですが、これを達成する最も簡単な方法は何か分かりません。これは私が私のコードの例の概要であるとして想定するものである:Pythonでリモートホストをモックする
import os
import paramiko
import pytest
def my_function(hostname, relpath='.', **kwargs):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname, **kwargs)
sftp = ssh.open_sftp()
sftp.chdir(relpath)
stdin, stdout, stderr = ssh.exec_command("echo hallo > test.txt")
@pytest.fixture("module")
def mock_remote_host():
# start a remote host here with a local test path
try:
yield hostname, testpath, {"username":"bob", "password":"1234"}
finally:
# delete the test path
# close the remote host
def test_my_function(mock_remote_host):
hostname, dirpath, kwargs = mock_remote_host
my_function(hostname, **kwargs)
filepath = os.path.join(dirpath, 'test.txt')
assert os.path.exists(filepath)
私はparamiko test modulesを見て持っていたが、彼らは私のユースケースのために、非常に複雑なように思えますし、私が簡素化については移動するかどうかはわかりませんそれら。
PyPiで利用可能な第三者 '模擬(mock) 'モジュールは、Python 3.3に' unittest.mock'として組み込まれたものです。 – chepner
これは私が見る唯一の問題は、ファイル/フォルダなどを作成/破壊するためにparamikoの機能をかなり使用することになるということです。このため、私は誰もが模擬関数を作成する必要があります。これらの機能。実際にプロダクションコードで何が起こるかを適切にテストしていないような感じです。 –