Python中文
首页
教程
问答
标签
搜索
登录
注册
mock/patch os.path.exists具有多个返回值
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我正在尝试测试一个函数,该函数遍历一个列表,并为列表中的每个项调用<code>os.path.exists</code>。我的测试是向函数传递一个包含两个对象的列表。我需要<code>os.path.exists</code>为其中一个返回<code>True</code>,为另一个返回<code>False</code>。我试过这个:</p> <pre><code>import mock import os import unittest class TestClass(unittest.TestCase): values = {1 : True, 2 : False} def side_effect(arg): return values[arg] def testFunction(self): with mock.patch('os.path.exists') as m: m.return_value = side_effect # 1 m.side_effect = side_effect # 2 arglist = [1, 2] ret = test(argList) </code></pre> <p>使用第1行和第2行中的任何一行,但不要同时使用这两行,给出<code>NameError: global name 'side_effect' is not defined</code></p> <p>我找到了这个<a href="https://stackoverflow.com/q/7665682/1393498">question</a>并修改了我的代码如下:</p> <pre><code>import mock import os class TestClass(unittest.TestCase): values = {1 : True, 2 : False} def side_effect(arg): return values[arg] def testFunction(self): mockobj = mock(spec=os.path.exists) mockobj.side_effect = side_effect arglist = [1, 2] ret = test(argList) </code></pre> <p>这会产生<code>TypeError: 'module' object is not callable</code>。 我还试着切换这些线路:</p> <pre><code>mockobj = mock(spec=os.path.exists) mockobj.side_effect = side_effect </code></pre> <p>为了这个</p> <pre><code>mockobj = mock(spec=os.path) mockobj.exists.side_effect = side_effect </code></pre> <p>还有这个</p> <pre><code>mockobj = mock(spec=os) mockobj.path.exists.side_effect = side_effect </code></pre> <p>产生同样的错误。有谁能指出我做错了什么,我能做些什么来让这个工作?</p> <p><strong>编辑:</strong> 在将我的答案发布到下面之后,我意识到我的第一部分代码实际上也可以工作,我只需要<code>m.side_effect = TestClass.side_effect</code>,而不是<code>m.side_effect = side_effect</code>。</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>我相信你本可以做到的。由于初始定义不是全局的,调用<code>side_effect</code>将在全局范围内进行</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
Django:。是不是“超级用户”字段不起作用
2 回答
Django:'DeleteQuery'对象没有属性'add'
9 回答
Django:'ModelForm'对象没有属性
1 回答
Django:'python manage.py runserver'返回'TypeError:'WindowsPath'类型的对象没有len()
10 回答
Django:'Python管理.pysyncdb'不创建我的架构表
4 回答
Django:'Python管理.py迁移“耗时数小时(和其他奇怪的行为)
9 回答
Django:'readonly'属性在我的ModelForm上不起作用
4 回答
Django:'RegisterEmployeeView'对象没有属性'object'
8 回答
Django:'str'对象没有属性'get'
2 回答
Django:'创建' 不能被指定为Order模型表单中的值,因为它是一个不可编辑的字段
5 回答
Django:“'QuerySet'类型的对象不是JSON可序列化的”
7 回答
Django:“'utf8'编解码器无法解码位置19983中的字节0xe9:无效的连续字节”,加载临时文件时
2 回答
Django:“<…>”需要有一个字段“id”的值,然后才能使用这个manytomy关系
2 回答
Django:“AnonymousUser”对象没有“get_full_name”属性
8 回答
Django:“ascii”编解码器无法解码位置1035中的字节0xc3:序号不在范围内(128)
6 回答
Django:“BaseTable”对象不支持索引
1 回答
Django:“collections.OrderedDict”对象不可调用
3 回答
Django:“Country”对象没有属性“all”
3 回答
Django:“Data”对象没有属性“save”
7 回答
Django:“datetime”类型的对象不是JSON serializab
2 回答