我正在使用 paramiko 编写一些函数来执行命令并在远程主机上创建文件。我想为它们编写一些单元测试,但我不知道实现此目的最简单的方法是什么?这是我设想的代码大纲示例:
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 测试模块 https://github.com/paramiko/paramiko/blob/master/tests/test_client.py,但它们对于我的用例来说似乎相当复杂,我不知道如何简化它们。
我认为你真正需要嘲笑的是paramiko.SSHClient
目的。您正在对您的功能进行单元测试my_function
,你可以假设paramiko
模块工作正常,您唯一需要进行单元测试的是my_function
调用 this 的方法paramiko.SSHClient
以正确的方式。
To mock paramiko.SSH
您可以使用的模块单元测试.mock https://docs.python.org/3.3/library/unittest.mock.html并装饰你的test_my_function
功能与@mock.patch.object(paramiko.SSHClient, sshclientmock)
。你必须定义sshclientmock
作为某种Mock
or MagicMock
first.
在 python 2.7 中也有一些等价的unittest.mock
但我不记得在哪里可以找到它。
编辑:正如@chepner 在评论中提到的。对于 python 2.7 你可以找到mock
模块输入pypi https://pypi.python.org/pypi/mock/2.0.0并使用安装它pip install mock
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)