Я столкнулся с проблемой при тестировании фрагмента кода Python, которую я просто не могу понять.В следующем коде я тестирую метод модуля, который должен возвращать 200, когда отправка найдена, и 404, когда отправка не найдена.Метод, который получает отправку, является внешним по отношению к модулю, который я тестирую, поэтому он должен быть смоделирован в тесте.
При выполнении приведенного ниже кода второй тест завершается неудачно, поскольку возвращаемый код состояния равен 200. Когда яprint analysis_result
печатает макетированное значение для get_single_submission
, предоставленное в первом тесте.Если я закомментирую первый тест, набор тестов пройдет нормально.Буду признателен за любые идеи или пожелания, которые могут быть у людей!
Тестовый код:
class AnalysisTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
pass
@classmethod
def tearDownClass(cls):
pass
def setUp(self):
pass
def tearDown(self):
pass
@mock.patch('lib.retention.Submissions')
@mock.patch('lib.retention.Analysis')
def test_analysis_get_submission(self, mock_Analysis, mock_Submissions):
mock_Submissions.return_value.get_single_submission.return_value = Submission(
md5="md5",
analyze_completed="01-23-12"
)
from api import analysis
test_event = {
"pathParameters": {
"query": ["test"],
"id": 1
}
}
analysis_result = analysis.analysis_get(test_event)
print(analysis_result)
self.assertEqual(analysis_result["statusCode"], 200)
@mock.patch('lib.retention.Submissions')
@mock.patch('lib.retention.Analysis')
def test_analysis_get_submission_not_found(self, mock_Analysis, mock_Submissions):
mock_Submissions.return_value.get_single_submission.return_value = None
from api import analysis
test_event = {
"pathParameters": {
"query": ["test"],
"id": 1
}
}
analysis_result = analysis.analysis_get(test_event)
print("not found")
print(analysis_result)
self.assertEqual(analysis_result["statusCode"], 404)
И результат тестирования:
@mock.patch('lib.retention.Submissions')
@mock.patch('lib.retention.Analysis')
def test_analysis_get_submission_not_found(self, mock_Analysis, mock_Submissions):
mock_Submissions.return_value.get_single_submission.return_value = None
from api import analysis
test_event = {
"pathParameters": {
"query": ["test"],
"id": 1
}
}
analysis_result = analysis.analysis_get(test_event)
print("not found")
print(analysis_result)
self.assertEqual(analysis_result["statusCode"], 404)
EОшибка Assertion: 200! = 404
api/tests/analysis_test.py:72: AssertionError
------------------------------------------------------------------------------- Captured stdout call --------------------------------------------------------------------------------
not found
{'statusCode': 200, 'isBase64Encoded': False, 'headers': {'Content-Type': 'application/json'}, 'body': '{\n "metadata": {\n "md5": "md5",\n "analyzed_date": "01-23-12"\n }\n}'}
ОБНОВЛЕНИЕ: Файловая структура
project/lib/retention.py
/api/analysis.py
/tests/analysis_test.py
ОБНОВЛЕНИЕ 2: Я распечатал Submissions
в analysis_get
и нашел то же самоекак-то используется в обоих тестах
<MagicMock name='Submissions' id='4599620440'>