我的理解是,当你在单元测试中使用补丁装饰器时(我正在使用鼻子框架),该补丁装饰器的范围是测试用例的范围.这是问题所在:
@patch('a')
@patch('b')
@patch('b')
def test_add_stuff(self, mock_a, mock_b, mock_c):
url = '/path/blah/blah'
assert_true(stuff)
# Now those three patch decorators should be "done"
def test_delete_stuff(self):
url = '/another_path/not_important'
assert_true(something)
Run Code Online (Sandbox Code Playgroud)
在我的第二个测试用例test_delete_stuff中,我在实际代码中添加了一个print语句,以便调试正在抛出的错误.事实证明,通过url命中控制器动作中的一个函数调用返回一个MagicMock对象!它是来自之前测试用例的mock_b.
如果我只是颠倒两个测试用例的顺序,则没有任何变化.如果我用修补程序装饰器注释掉那个,我的第二个测试用例就会通过.
附加信息:类上没有这些实例方法所在的修补程序装饰器.
有任何想法吗?
--UPDATE--
事实证明,我没有在他们被查找的地方模拟我的函数调用,这解决了问题.但是,它没有解释为什么补丁的范围超过了一个测试用例.
如果仅在使用app.get发送GET请求时实例化控制器,并且控制器文件中的导入被模拟,为什么MagicMock对象会通过多个单元测试持续存在?
我是p4的新手,因此,一些解释将比答案本身更受赞赏和帮助。
我要编辑文件foo.txt。我在此文件所在的目录中。
我尝试编辑foo.txt的方法如下:
$p4 sync
File(s) up-to-date.
$p4 edit foo.txt
foo.txt - files(s) not on client
$p4 add foo.txt
//depot/directory/foo.txt#1 - opened for add
$p4 edit foo.txt
//depot/directory/foo.txt#1 - can't edit (already opened for add)
Run Code Online (Sandbox Code Playgroud)
谷歌搜索此问题时,没有太多信息,这表明它可能微不足道。
我是Perforce的新手。这是问题所在:
$ p4 submit
Change 9 created with 1 open file(s)
Submitting change 9.
Locking 1 files ...
Submit validation failed -- fix problems then use 'p4 submit -c 9'.
Run Code Online (Sandbox Code Playgroud)
问题是我在提交表单中输入的描述不正确。我该如何更改?
我检查了p4提交的文档,但不明白-i的作用。也许这就是我所需要的。我试过了:
$ p4 submit -i "Better description" -c 9 filename
Run Code Online (Sandbox Code Playgroud)
并得到:
Usage: submit [ -i -s -r ] [ -c changelist# ] [file]
Missing/wrong number of arguments
Run Code Online (Sandbox Code Playgroud)
谢谢!
我通过循环字符串列表在python中编写多个xml文件.假设我有:
from xml.etree.ElementTree import ElementTree, Element, SubElement, tostring
parent = Element('parent')
child = SubElement(parent, 'child')
f = open('file.xml', 'w')
document = ElementTree(parent)
l = ['a', 'b', 'c']
for ch in l:
child.text = ch
document.write(f, encoding='utf-8', xml_declaration=True)
Run Code Online (Sandbox Code Playgroud)
输出:
<?xml version='1.0' encoding='utf-8'?>
<parent><child>a</child></parent><?xml version='1.0' encoding='utf-8'?>
<parent><child>b</child></parent><?xml version='1.0' encoding='utf-8'?>
<parent><child>c</child></parent>
Run Code Online (Sandbox Code Playgroud)
期望的输出:
<?xml version='1.0' encoding='utf-8'?>
<parent>
<child>a</child>
<child>b</child>
<child>c</child>
</parent>
Run Code Online (Sandbox Code Playgroud)
我只希望xml声明出现在文件的顶部一次.可能应该在循环之前将声明写入文件,但是当我尝试这样时,我会得到空元素.我不想这样做:
f.write('<?xml version='1.0' encoding='utf-8'?>')
Run Code Online (Sandbox Code Playgroud)
如何只写xml声明到文件?
编辑:所需的输出
根据https://docs.python.org/2/reference/simple_stmts.html#yield上的文档,
保留所有本地状态,包括局部变量,指令指针和内部评估堆栈的当前绑定:保存足够的信息,以便下次调用next()时,函数可以像yield语句一样完成只是另一个外部电话.
这是一个简单的案例:
def generator():
my_list = range(10)
print "my_list got assigned"
for i in my_list:
print i
yield
return
Run Code Online (Sandbox Code Playgroud)
在shell中,generator()的行为如下:
>>>>generator().next()
my_list got assigned
0
>>>>generator().next()
my_list got assigned
0
Run Code Online (Sandbox Code Playgroud)
我原以为每次调用my_list都不会被重新分配.next()被调用.有人可以解释为什么会发生这种情况,以及为什么文档似乎与此相矛盾?
python ×3
perforce ×2
elementtree ×1
generator ×1
mocking ×1
nose ×1
subroutine ×1
unit-testing ×1
xml ×1