python单元测试补丁模拟方法不返回返回值

洛根

我正在尝试编写一个测试用例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_testpatch装饰器中替换测试模块的名称

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Vue单元测试-模拟插件的返回值

单元测试:如何从模拟接口异步返回值

单元测试服务 Moq 设置不返回值

对不返回值的函数进行单元测试

对无返回值的方法进行单元测试

在单元测试中模拟从main()调用的函数返回值

EF6-无法为单元测试模拟ObjectResult <T>的返回值

模拟主题的返回值 - 使用 Jasmine 进行单元测试

Python 单元测试:模拟补丁

Python模拟补丁os.environ并返回值

kotlin 中的单元测试无法返回值

异步单元测试无法返回值

从数据库返回值的单元测试功能

异步回调的返回值(在单元测试中)

如何根据可观察到的返回值对演示者方法进行单元测试?

如何对没有返回值但写入System.out的方法进行单元测试

python中没有返回值的函数的单元测试

应用不返回返回值

卡片抽奖模拟不返回值

为什么在此延迟语句(无返回)运行时不返回返回值?

为未显式返回值的函数编写 Mocha 单元测试

如何对没有返回值的php类构造函数进行单元测试

SpyOn TypeORM存储库更改用于单元测试NestJS的返回值

Jasmine、AngularJS:对超时后返回值的函数进行单元测试

单元测试中的HostBuilder:HostContext.Configuration.GetSection返回值null

如何对函数的返回值进行单元测试-Angular(Jasmine / Karma)

Python:返回值,不返回

Java:单元测试返回对象的方法

根据Moq在单元测试中传递的参数返回不同的模拟值