【问题标题】:pytest mock my own module imported in tested functionpytest 模拟我自己在测试函数中导入的模块
【发布时间】:2019-10-18 16:18:24
【问题描述】:

我想测试一个导入另一个模块的函数。

所以我想模拟模块。

所以我的测试功能:

def test_validate_transaction():

    dataset_id = "idx"
    transaction_id = "idy"
    transaction = {
            "transaction_rid" : transaction_id,
            "is_successful" : True
        }
    with mock.patch('table_management.get_last_transaction_id', return_value=transaction) :
        assert validate_transaction(dataset_rid,transaction_rid) == False

我要测试的功能是

import json
import os
from table_management import get_last_transaction_id


def validate_transaction(dataset_id,transaction_id):
    try:

        transaction = get_last_transaction_id(dataset_rid)
        return True if transaction['transaction_id'] != transaction_rid or transaction['is_successful']==False else False
    except Exception as e:
        print("An exception occurred " + str(e))
        return {}

但是通过这样做,我收到错误:

..\..\..\env\lib\site-packages\mock\mock.py:1378: in __enter__
     self.target = self.getter() ..\..\..\env\lib\site-packages\mock\mock.py:1548: in <lambda>
     getter = lambda: _importer(target)


 target = 'table_management'

     def _importer(target):
         components = target.split('.')
         import_path = components.pop(0)
      thing = __import__(import_path) 
E       ImportError: No module named table_management

 ..\..\..\env\lib\site-packages\mock\mock.py:1231: ImportError

你知道缺少什么吗?

【问题讨论】:

    标签: python mocking pytest


    【解决方案1】:

    我不确定您是否确实没有其他与导入相关的问题,但您正在尝试模拟错误的对象。您需要模拟在 validate_transaction 所在的模块中导入的 get_last_transaction_id 。你没有提到它的名字,所以我们假设它叫做xyz

    from full_path.to.xyz import validate_transaction
    
    def test_validate_transaction():
        dataset_id = "idx"
        transaction_id = "idy"
        transaction = {
                "transaction_rid" : transaction_id,
                "is_successful" : True
            }
    
        with mock.patch('xyz.get_last_transaction_id', return_value=transaction):
            assert validate_transaction(dataset_rid,transaction_rid) == False
    

    【讨论】:

      猜你喜欢
      • 2020-02-02
      • 1970-01-01
      • 2019-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多