我来到了之前在测试中从未使用过的mock库。我需要服务器的响应(服务器实际上并不在那里)是否在线。首先,我需要检查该服务器 IP,然后检查其状态以及 TRUE 或 FALSE 的响应。 Server.object 应该来自 models.py 所以我想我需要在这里开始使用模拟库。也许你们中的一些人可以向我解释或向我展示一些从“模拟”服务器获取虚假响应的示例。我已经阅读了 Django 测试、mock lib 官方文档,但它们都没有给我足够的信息如何模拟来自假服务器的响应。
代码示例:
def ssh_server(server_list, timeout=200):
online = False
response = []
server_state = []
timeout_stamp = datetime.datetime.now() + datetime.timedelta(seconds=timeout)
for obj_id in server_list:
server = models.Server.objects.get(id=obj_id)
ip = server.ip
client = paramiko.SSHClient()
client.load_system_host_keys()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
while True:
try:
client.connect(ip, username='root')
online = True
except:
online = False
最佳答案
在您的测试中,您需要修补 paramiko。像这样:
import unittest
from mock import patch
from mymodue import ssh_server
class MyTest(unittest.TestCase):
@patch('mymodule.paramiko')
def test_server(self, paramiko):
ssh_server(server_list, timeout=200)
不会引发异常,因此 client.connect(ip, username='root')
将为 TRUE。
它所做的是模拟 paramiko 模块,并将其导入到您的模块中 - 它将是 MagicMock 的一个实例,每当调用其方法时,它将返回 MagicMock 的更多实例。因此,最终 client.connect(ip, username='root') 只会返回 MagicMock 的实例,它永远不会尝试连接到任何东西,您的代码根本不会使用 paramiko。
根据您正在测试的内容,您可能会检查测试方法中的 paramiko 变量,以断言它已按照您预期的方式使用,即其方法已被正确调用。 mock.patch 文档将帮助您做到这一点:http://www.voidspace.org.uk/python/mock/patch.html
关于python - Django 单元测试模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28238284/