J'écris certaines fonctions, en utilisant paramiko, pour exécuter des commandes et créer des fichiers sur un hôte distant. Je voudrais écrire quelques tests unitaires pour eux, mais je ne sais pas ce qui serait le moyen le plus simple pour y parvenir? Voilà ce que j'envisage comme un aperçu exemple de mon code:Mock un hôte distant en 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)
J'ai eu un coup d'oeil à la paramiko test modules, mais ils semblent assez complexes pour mon cas d'utilisation et je ne suis pas sûr de savoir comment s'y prendre pour simplifier leur.
Le troisième module 'mock', disponible sur PyPi, est ce qui a été incorporé dans Python 3.3 sous le nom' unittest.mock'. – chepner
Le seul problème que je vois avec cela, c'est que je vais utiliser beaucoup de fonctionnalités de paramiko pour créer/détruire des fichiers/dossiers etc Donc, cela signifie que je dois créer une fonction fictive pour tout le monde de ces fonctions.Ce qui vous donne l'impression de ne pas tester correctement ce qui va se passer dans le code de production. –