스크립트 에서 test_is_user_present()
다른 함수를 호출 하는 테스트 케이스를 작성하려고합니다.execute_redshift_sql()
redshift_util.py
함수 execute_redshift_sql ()에서 예상되는 반환 값을 1
. 하지만 함수가 호출 된 후에는 결과에서이 값이 반환되지 않습니다! 또한 디버깅 목적으로 몇 가지 값을 인쇄했습니다.
아래 테스트 사례를 살펴볼 수 있습니다.
from mock import patch, Mock, MagicMock
from cia_admin_operations.redshift_util import execute_redshift_sql
@patch('cia_admin_operations.redshift_util.execute_redshift_sql')
def test_is_user_present(mock_execute_redshift_sql):
ldap_user = "dummy_user"
mock_out = Mock()
user_check_sql = "SELECT COUNT(1) FROM pg_user WHERE usename = '{}';".format(ldap_user)
mock_execute_redshift_sql.return_value = 1
print(mock_execute_redshift_sql())
result = execute_redshift_sql(mock_out, user_check_sql)
print(result)
print(result())
> assert result() == 1
E AssertionError: assert <Mock name='m...749067684720'> == 1
E -<Mock name='mock.query().getresult()()' id='139749067684720'>
E +1
test/test_cia_admin_operations.py:51: AssertionError
----------------------------- Captured stdout call -----------------------------
1
<Mock name='mock.query().getresult()' id='139749067684776'>
<Mock name='mock.query().getresult()()' id='139749067684720'>
redshift_util.py
def execute_redshift_sql(connection, sqlQuery):
"""Executes redshift query"""
logger.info("Executing following SQL query :\n %s" % sqlQuery)
try:
result = connection.query(sqlQuery)
logger.info("Redshift query is successfully executed.")
except Exception as e:
logger.error("Query not executed : %s" % e)
return None
# return only if the result has some data
if result:
logger.info("Query result :\n %s" % result)
return result.getresult()
else:
return 0
가져올 때 함수를 패치해야합니다. 이 문제를 해결할 수있는 한 가지 방법은 다음을 사용하는 것입니다.
from mock import patch, Mock
import cia_admin_operations.redshift_util
@patch('cia_admin_operations.redshift_util.execute_redshift_sql')
def test_is_user_present(mock_execute_redshift_sql):
ldap_user = "dummy_user"
mock_out = Mock()
user_check_sql = "SELECT COUNT(1) FROM pg_user WHERE usename = '{}';".format(ldap_user)
mock_execute_redshift_sql.return_value = 1
result = cia_admin_operations.redshift_util.execute_redshift_sql(mock_out, user_check_sql)
print(result)
귀하의 경우 패키지에서 함수를 조롱했지만 로컬로 가져온 모듈을 사용했습니다. 패치 할 위치를 항상 확인 해야합니다 .
위에서 가져 오기를 조정했으며 패치를 조정할 수도 있습니다.
from mock import patch, Mock
from cia_admin_operations.redshift_util import execute_redshift_sql
@patch('redshift_test.execute_redshift_sql')
def test_is_user_present(mock_execute_redshift_sql):
ldap_user = "dummy_user"
mock_out = Mock()
user_check_sql = "SELECT COUNT(1) FROM pg_user WHERE usename = '{}';".format(ldap_user)
mock_execute_redshift_sql.return_value = 1
result = execute_redshift_sql(mock_out, user_check_sql)
print(result)
( 데코레이터 redshift_test
에서 테스트 모듈의 이름 을 대체 해야합니다 patch
)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다