gpt4 book ai didi

python - 如何从调用方法的函数中修补参数?

转载 作者:行者123 更新时间:2023-12-01 00:23:48 25 4
gpt4 key购买 nike

您好,我对单元测试还很陌生,因此我在unittest.mock 上遇到了一个大问题。我的项目由不同的模块组成。我的第一个模块是常规:

general.py


def do_something(item, collection):
# some more code that i want to test
try:
collection.insert_one(item)
except:
print("did not work")

我的第二个模块是 my_module.py

mymodule.py

import general
from pymongo import MongoClient

client = MongoClient("localhost", 27017)
db = client['db']
collection = db['col']

item =
{
"id": 1
}



def method:
general.do_something(item, collection)

现在我想测试general.py中的do_something(item, collection)方法,因此我想模拟collection.insert_one(item)。我没有找到可能的解决方案。我用 patch 尝试过,但我的问题是,参数集合(这是一个 pymongo 集合)是调用函数的参数。我现在如何设法模拟 collection.insert_one?

我的目标是提取collection.insert_one并在其中设置一个MagicMock。这个 Magic Mock 应该有可能崩溃以检查 except 部分是否有效,或者不崩溃以检查 try 部分是否有效。

TestGeneral.py
import unnittest

class TestGeneral(unittest.TestCase):

@patch()
def test_general():





提前谢谢您! :)

最佳答案

这里实际上并不需要模拟,您只需创建一个具有类似功能的类即可。

TestGeneral.py
import unnittest

class TestGeneral(unittest.TestCase):

def test_general_success():
assert general.do_something(collection(), None)

def test_general_failure():
with self.assertRaises(Exception):
general.do_something(collection(fail=True), None))

class collection:
def __init__(self, fail=False):
self.fail = fail

def insert_one(self, item):
if self.fail:
raise Exception
return True

然后您还可以检查标准输出以确保成功时使用打印

关于python - 如何从调用方法的函数中修补参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58768755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com