草庐IT

python - 如何在 python 中模拟 self ?

考虑以下代码。我想模拟self.get_value,它在foo.verify_client()中调用importunittestimportmockdefmock_get_value(self,value):return'client'classFoo:def__init__(self):passdefget_value(self,value):returnvaluedefverify_client(self):client=self.get_value('client')returnclient=='client'classtestFoo(unittest.TestCase):@mo

Python SQLAlchemy - 模拟模型属性的 "desc"方法

在我的应用程序中,每个模型都有一个类来保存常用查询(我猜它有点像DDD语言中的“存储库”)。这些类中的每一个都被传递给SQLAlchemysession对象,以在构造时创建查询。我在确定断言某些查询正在我的单元测试中运行的最佳方法时遇到了一些困难。使用无处不在的博客示例,假设我有一个包含列和属性“日期”和“内容”的“帖子”模型。我还有一个带有方法“find_latest”的“PostRepository”,它应该按“日期”降序查询所有帖子。它看起来像:frommyapp.modelsimportPostclassPostRepository(object):def__init__(se

用于单元测试的 Python 模拟过程

背景:我目前正在用Python编写进程监控工具(Windows和Linux)并实现单元测试覆盖率。进程监视器Hook到WindowsAPI函数EnumProcesses在Windows上并监视Linux上的/proc目录以查找当前进程。然后将进程名称和进程ID写入单元测试可访问的日志中。问题:当我对监控行为进行单元测试时,我需要一个进程来启动和终止。如果有一种(跨平台?)方式来启动和终止一个我可以唯一命名的假系统进程(并在单元测试中跟踪它的创建),我会很高兴。初步想法:我可以用subprocess.Popen()打开任何系统进程,但这会遇到一些问题。如果我用来测试的进程也由系统运行,则

python - 模拟 celery 任务的单元测试 Flask View

所以,我有一个flaskView,它将celery任务添加到队列中,并向用户返回200。fromflask.viewsimportMethodViewfromapp.tasksimportlaunch_taskclassExampleView(MethodView):defpost(self):#Doessomeverificationoftheincomingrequest,ifallgood:launch_task(task,arguments)return'Accepted',200问题在于测试以下内容,我不想拥有celery实例等。我只想知道在所有验证都正常之后,它会向用户返回

python - 模拟 side_effect 迭代器用完后可以重置吗?

mock.reset_mock()不会重置副作用迭代器。有没有一种方法可以做到这一点而无需再次创建模拟?>>>frommockimportMagicMock>>>mock=MagicMock(side_effect=[1,2])>>>mock(),mock()(1,2)>>>mock()Traceback(mostrecentcalllast):File"",line1,inmock()File"C:\Python27\Lib\site-packages\mock.py",line955,in__call__return_mock_self._mock_call(*args,**kwa

python - 请求库中的模拟 session

在我的python代码中,我有全局requests.session实例:importrequestssession=requests.session()如何使用Mock来模拟它?这种操作有装饰器吗?我试过以下:session.get=mock.Mock(side_effect=self.side_effects)但是(如预期的那样)此代码不会在每次测试后将session.get返回到原始状态,就像@mock.patch装饰器所做的那样。 最佳答案 由于requests.session()返回的是Session类的一个实例,所以也可以

python - 模拟 - 测试是否在不指定参数的情况下调用方法

我正在使用Mock库模拟Django的send_mail函数:fromdjango.core.mailimportsend_mailsend_mail=Mock()当我想断言调用了send_mail时,我的问题就出现了。我不能使用assert_called_with或相关方法,因为它们需要参数,而我不会完全知道/不想在测试环境中输入这些参数(它涉及模板)。我只想知道该方法已被调用。打印语句清楚地表明它已被调用,但如果我尝试这样做:self.assertEqual(send_mail.called,True)我得到一个错误,因为被调用的属性仍然是False。如何在不指定属性的情况下测试是

Python @patch 不工作

我正在尝试测试一个在其中创建另一个类实例的方法,我正在尝试模拟内部类的创建...这对我不起作用。我尝试将问题复制到一个简化的案例中-但仍然没有成功。这是简化的案例:我有一个名为pymock的目录,里面有一个__init__.py。除此之外还有这3个文件:foo.py#!/usr/bin/pythonclassFoo(object):deffoo1(self):return1goo.py#!/usr/bin/pythonfromfooimportFooclassGoo(object):defgoo1(self):f=Foo()returnf.foo1()goo_test.py#!/usr

python - 在 Python 中使用 Mock()

您能否给出一些在Django单元测试中使用Mock()的清晰示例?我想更清楚地了解它。更新:我想出了一些东西,所以我在下面分享。 最佳答案 第1部分:基础知识frommockimportMock模拟对象是一种对象,它是一种用于代码的Dummy我们不想被执行,但我们想知道一些信息(调用次数,调用参数)。此外,我们可能希望为该代码指定一个返回值。让我们定义一个简单的函数:deffoo(value):returnvalue+value现在我们准备为它创建一个Mock对象:mock_foo=Mock(foo,return_value='mo

python - 模拟 Python 迭代器以与 Sphinx 一起使用

我正在使用Sphinx来记录一个依赖于wxPython的项目,使用autodocs扩展,以便它会自动从我们的文档字符串生成页面。autodocs扩展会自动在您import的每个模块上运行,这对我们的包来说很好,但是当我们import一个大型外部库时,比如wxPython。因此,我没有让它从wxPython生成所有内容,而是使用unittest.mocklibrarymodule(以前是外部包Mock)。最基本的设置对于wxPython的大部分工作都很好,但我遇到了一种情况,我看不到一个简单的解决方法(可能是因为直到本周我对mock还比较陌生)。目前,我的conf.py文件的末尾有以下内