簡體   English   中英

pytest 模擬我自己在測試 function 中導入的模塊

[英]pytest mock my own module imported in tested function

我想測試一個導入另一個模塊的 function。

所以我想模擬模塊。

所以我的測試function:

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

我要測試的 function 是

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

你知道缺少什么嗎?

我不確定您實際上沒有與導入相關的其他一些問題,但您正在嘗試模擬錯誤的 object 您需要模擬在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM