为应用程序编写单元测试的模拟 redis
Mock redis for writing unittest for application
我有一个 flask 应用程序,我在其中使用带有 redis 的“flask-caching”。我在缓存中保存了一些值并检索它进行处理。我必须为此编写单元测试。我如何模拟 redis 实例并在 flask 缓存配置中传递该服务器的主机。
我确实尝试过“fakeredis”,但它没有给我 redis 主机,我可以在 flask 缓存中使用它并测试我的应用程序。
我该如何为此编写单元测试用例?
def func_1():
# some steps
x = func2() # this is where the code for flask caching (redis) data retrieval is
# process x
我必须测试 func_1()
mock object library can be used to create a Mock instance for Redis that returns a value用于特定的方法调用,例如:
from unittest.mock import Mock
def test_redis():
mock_redis = Mock()
mock_redis.get.return_value = "2020-12-31T00:00:00".encode()
function_to_test(mock_redis)
如果一个函数需要被mock,使该函数不被实际调用,而是在被测函数内部使用,可以使用patch decorator,如下:
from unittest.mock import patch
@patch("package.module.function_to_mock")
def test_redis(mock_function_to_mock):
mock_function_to_mock.get.return_value = "2020-12-31T00:00:00".encode()
function_to_test()
这可用于模拟您正在测试的函数内的 flask 缓存相关代码。
编辑
对于您的情况,我相信您可能希望执行以下操作:
from unittest.mock import patch
@patch("package.module.func2")
def test_func_1(mock_func2):
mock_func2.return_value = "Test value"
func_1()
mock_func2.assert_called_once()
这里 func2()
被模拟了,它的 return 值被设置为 "Test value"
,所以当它在 func_1()
内部调用时,变量 x
等于 "Test value"
Note: the path passed to patch()
must be to where func2()
is imported, and not to the module where func2()
is defined.
我有一个 flask 应用程序,我在其中使用带有 redis 的“flask-caching”。我在缓存中保存了一些值并检索它进行处理。我必须为此编写单元测试。我如何模拟 redis 实例并在 flask 缓存配置中传递该服务器的主机。
我确实尝试过“fakeredis”,但它没有给我 redis 主机,我可以在 flask 缓存中使用它并测试我的应用程序。
我该如何为此编写单元测试用例?
def func_1():
# some steps
x = func2() # this is where the code for flask caching (redis) data retrieval is
# process x
我必须测试 func_1()
mock object library can be used to create a Mock instance for Redis that returns a value用于特定的方法调用,例如:
from unittest.mock import Mock
def test_redis():
mock_redis = Mock()
mock_redis.get.return_value = "2020-12-31T00:00:00".encode()
function_to_test(mock_redis)
如果一个函数需要被mock,使该函数不被实际调用,而是在被测函数内部使用,可以使用patch decorator,如下:
from unittest.mock import patch
@patch("package.module.function_to_mock")
def test_redis(mock_function_to_mock):
mock_function_to_mock.get.return_value = "2020-12-31T00:00:00".encode()
function_to_test()
这可用于模拟您正在测试的函数内的 flask 缓存相关代码。
编辑
对于您的情况,我相信您可能希望执行以下操作:
from unittest.mock import patch
@patch("package.module.func2")
def test_func_1(mock_func2):
mock_func2.return_value = "Test value"
func_1()
mock_func2.assert_called_once()
这里 func2()
被模拟了,它的 return 值被设置为 "Test value"
,所以当它在 func_1()
内部调用时,变量 x
等于 "Test value"
Note: the path passed to
patch()
must be to wherefunc2()
is imported, and not to the module wherefunc2()
is defined.