Django 单元测试模拟
Django unit tests mock
我来到了 mock 库,我以前在测试中从未使用过。我需要服务器的响应(服务器实际上不存在)是否在线。首先,我需要检查该服务器 IP,然后使用 TRUE 或 FALSE 的响应检查它的状态。 Server.object 应该来自 models.py 所以我想我需要在这里开始使用模拟库。也许你们中的一些人可以向我解释或向我展示一些从“模拟”服务器获得虚假响应的示例。我已经阅读了 Django testing 和 mock lib 官方文档,但其中 none 为我提供了足够的信息来模拟来自假服务器的响应。
代码示例:
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 的一个实例,它会在调用其方法时 return 更多 MagicMock 实例。因此,最终 client.connect(ip, username='root')
将只是 return MagicMock 的一个实例,它永远不会尝试连接任何东西,您的代码根本不会使用 paramiko。
根据您正在测试的内容,您可能会检查测试方法中的 paramiko 变量,以断言它已按您预期的方式使用,即它的方法已被正确调用。 mock.patch 文档将帮助您做到这一点:http://www.voidspace.org.uk/python/mock/patch.html
我来到了 mock 库,我以前在测试中从未使用过。我需要服务器的响应(服务器实际上不存在)是否在线。首先,我需要检查该服务器 IP,然后使用 TRUE 或 FALSE 的响应检查它的状态。 Server.object 应该来自 models.py 所以我想我需要在这里开始使用模拟库。也许你们中的一些人可以向我解释或向我展示一些从“模拟”服务器获得虚假响应的示例。我已经阅读了 Django testing 和 mock lib 官方文档,但其中 none 为我提供了足够的信息来模拟来自假服务器的响应。
代码示例:
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 的一个实例,它会在调用其方法时 return 更多 MagicMock 实例。因此,最终 client.connect(ip, username='root')
将只是 return MagicMock 的一个实例,它永远不会尝试连接任何东西,您的代码根本不会使用 paramiko。
根据您正在测试的内容,您可能会检查测试方法中的 paramiko 变量,以断言它已按您预期的方式使用,即它的方法已被正确调用。 mock.patch 文档将帮助您做到这一点:http://www.voidspace.org.uk/python/mock/patch.html