I have the the following method in a RedisDriver
class:
def get(self, key):
key_str = str(key)
try:
master = self.connection.master_for(self.service)
value = master.get(key_str)
except RedisError as err:
error_str = "Error while retrieving value from redis : " + str(err)
return {"success": False, "error": error_str}
I want to check is the error message is correct:
I tried the following:
@mock.patch("code.redis_driver.redis_sentinel")
@mock.patch("code.redis_driver.RedisDriver.get", side_effect=RedisError)
def test_redis_driver_delete(mocked_sentinel, mock_redis_sentinel):
mocked_master = mock.Mock()
mock_redis_sentinel.master_for.return_value = mocked_master
redis_driver = RedisDriver(mock_redis_sentinel)
result = redis_driver.get("test")
assert result == {"success": False, "error": "test"}
This does not work since an exception is raised:
E redis.exceptions.RedisError
Since this does not work I try the following:
@mock.patch("code.redis_driver.redis_sentinel")
@mock.patch("code.redis_driver.RedisDriver.get", side_effect=RedisError)
def test_redis_driver_delete(mocked_sentinel, mock_redis_sentinel):
mocked_master = mock.Mock()
mock_redis_sentinel.master_for.return_value = mocked_master
redis_driver = RedisDriver(mock_redis_sentinel)
with pytest.raises(RedisError) as exception:
result = redis_driver.get("test")
assert result == {"success": False, "error": str(exception)}
This always passes, whatever I set result
to. How can I catch the expected output?