Я просмотрел большую часть соответствующей документации по модульному тестированию Flask и Flask, включая документацию библиотеки Mock, но не смог найти решение для моей проблемы.
I иметь приложение Flask с обработчиком для маршрута /get_calc
, который применяет формулу арифметики c к итерируемым числам, предоставляемым из серверной части (не клиентом). Структура проекта приложения:
my_app
├── api.py
├── app
│ ├── __init__.py
│ └── routes.py
├── static_data.py
├── static_data.csv
├── requirements.txt
└── test_app.py
Вот выдержка из routes.py
.
from flask import jsonify
from static_data import get_numbers
import app
from app import app
@app.route('/get_calc', methods=['GET'])
def get_calc():
"""
/get_calc request handler
"""
try:
calc = get_numbers()
except MemoryError as e:
return jsonify(error=str(e))
else:
return jsonify(calc=calc)
Потенциально, в зависимости от того, насколько велики числа, участвующие в вычислениях в get_numbers()
. MemoryError
может быть вызвано там. Я написал тестовый блок для ситуации, когда все работает нормально, а MemoryError
не генерируется. Мне нужен тестовый блок для ситуации, когда генерируется MemoryError
. Я использую тестовый клиент Flask.
Я пробовал это
import unittest
from unittest.mock import Mock, patch
import app
from app import app as App
App.testing = True
class TestApp(unittest.TestCase):
...
@patch('app.routes.get_calc')
def test_get_calc__memory_error__returns_error(self, mock_get_calc):
"""
Test case for the /get_calc endpoint - memory error, error returned.
"""
with App.test_client() as test_client:
mock_get_calc.return_value = {'error': MemoryError('test')}
response = test_client.get('/get_calc')
self.assertEqual(response.json, {'error': MemoryError('test')})
Я знаю, что, должно быть, я что-то не так делаю, но это, вероятно, сводится к тому, что мы не очень хорошо знаем mock
, но я получаю ошибку подтверждения.
> self.assertEqual(response.json, {'error': MemoryError('test')})
E AssertionError: {'calc': -2040234.2349} != {'error': MemoryError('test')}
E - {'calc': -2040234.2349}
E + {'error': MemoryError('test')}
test_app.py:67: AssertionError
Может кто-нибудь указать, что я делаю неправильно, и как я могу высмеять ответ об ошибке с get_calc
?