小编Bow*_*ser的帖子

Python补丁装饰器溢出到其他方法

我的理解是,当你在单元测试中使用补丁装饰器时(我正在使用鼻子框架),该补丁装饰器的范围是测试用例的范围.这是问题所在:

@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对象会通过多个单元测试持续存在?

python unit-testing mocking nose

6
推荐指数
1
解决办法
609
查看次数

p4-如何在客户端中编辑为添加或未打开而打开的文件

我是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)

谷歌搜索此问题时,没有太多信息,这表明它可能微不足道。

version-control perforce

4
推荐指数
1
解决办法
4256
查看次数

如何更改P4提交说明

我是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)

谢谢!

perforce

3
推荐指数
2
解决办法
4928
查看次数

使用Python将xml声明写入文件

我通过循环字符串列表在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声明到文件?

编辑:所需的输出

python xml elementtree

3
推荐指数
1
解决办法
3617
查看次数

Python生成器函数如何维护本地状态?

根据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 generator subroutine

2
推荐指数
2
解决办法
1674
查看次数