В моем модульном тесте я монтирую функцию в своем коде.В коде я вызываю функцию один раз.Объект Mock, который заменяет функцию в коде, возвращает call_count == 0 !!!
Это вызывает функцию в коде, а не фиктивный объект!(См. Вывод консоли ниже. В нем не должно быть сказано, что "asticsearch_connect был вызван ")
Вопрос: Как исправить код, чтобы он корректно исправлял функциюasticsearch_connect, call_count == 1 и утверждение проходит?
==============================
test_handler.py
import sys, os, inspect
currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))
parentdir = os.path.dirname(currentdir)
parentdir = "%s\\health_check"%os.path.dirname(parentdir)
sys.path.insert(0,parentdir)
print(parentdir)
import json
import pytest
import health_check
import app
import my_elastic_search
import mock
from mock import Mock
def test_lambda_handler(apigw_event, monkeypatch):
# arrange
elasticsearch_connect_mock = Mock()
monkeypatch.setattr('health_check.app.elasticsearch_connect', elasticsearch_connect_mock)
print("*************")
# act
ret = app.lambda_handler(apigw_event, "")
print("call count: %s"%elasticsearch_connect_mock.call_count)
# assert
elasticsearch_connect_mock.assert_called_with('hostname', 'user', 'password')
# print(elasticsearch_connect_mock.assert_called_with('{"hostname": "myhostname", "user": "myuser", "password": "mypass"}'))
app.py
import jon
import sys
import ssl
import boto3
import requests
from elasticsearch import Elasticsearch
from elasticsearch.connection import create_ssl_context
import elasticsearch
def lambda_handler(event, context):
# Connect to Elasicsearch
es = elasticsearch_connect("myhostname", "myuser", "mypass")
def elasticsearch_connect(hostname, user, password):
print("elasticsearch_connect was called")
output ==> call_count: 0 (неверно)
*************
elasticsearch_connect was called
call count: 0
и утверждение тоже не выполняется (неверно)
AssertionError: Expected call: mock('hostname', 'user', 'password')
E Not called