gpt4 book ai didi

python - 如何在 python 中为所有测试全局模拟一个方法

转载 作者:太空狗 更新时间:2023-10-29 23:58:07 25 4
gpt4 key购买 nike

我的 Django 项目在多个应用程序的各个模块中进行了数百个测试。最近我们添加了一个功能,在创建用户对象(使用 Django Signals)时发送电子邮件(通过 sendgrid)。

我们遇到的问题是,在运行测试时,许多用户是显式创建的或作为固定装置创建的。这导致每个测试周期发送数百封电子邮件,并且由于其中大部分无效,我们收到数百次退回邮件。除了所涉及的费用之外,Sendgrid 实际上还因为奇怪的行为而暂时暂停了我们的帐户。

显然,我可以单独模拟每个测试的调用,但是这必须在数百个地方进行,而且我们必须记住在我们创建的所有 future 测试中都这样做。

有没有更简单的方法来全局模拟所有测试的特定代码块(当然在实际运行时保持完整)

最佳答案

我不使用 Django,也许在 Django 中有一些惯用的方法可以很好地完成它。

我解决这类问题的方法是创建我自己的 TestCase 类,它从 unittest.TestCase 扩展并覆盖 setUpClass()/tearDownClass/setUp()/tearDown() 设置我在测试中全局需要的模拟/补丁(或至少在其中一部分)。

现在每次我需要它而不是导入 unittest.TestCase 模块时,我正在导入 myunittest.TestCase

示例:myunittest.py

import unittest

class TestCase(unittest.TestCase):

@classmethod
def setUpClass(cls):
super(TestCase, cls).setUpClass()
# Init your class Mock/Patch

@classmethod
def tearDownClass(cls):
# Remove Mocks or clean your singletons
super(TestCase, cls).tearDownClass()

def setUp(self):
super(TestCase, self).setUp()
# Init your obj Mock/Patch

@classmethod
def tearDown(self):
# ... if you need it
super(TestCase, self).tearDown()

在你的测试中:

from myunittest import TestCase

class Test(TestCase):
... Your test

关于python - 如何在 python 中为所有测试全局模拟一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35586534/

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