小编imo*_*lit的帖子

python mock side_effect或return_value依赖于call_count

为了测试一个轮询函数,我想模拟一个子函数的调用,这样第一次调用它就会失败,第二次调用它就会成功.这是一个非常简化的版本:

poll_function(var1):
    value = sub_function(var1)  # First call will return None
    while not value:
        time.sleep(POLLING_INTERVAL)  
        value = sub_function(var1) # A subsequent call will return a string, e.g "data"
    return value
Run Code Online (Sandbox Code Playgroud)

这可能与框架中的Mock对象有关mock吗?我知道Mock对象有一个call_count我应该可以以某种方式使用的属性.

现在我已经通过创建一个我用来修补补丁的自定义模拟对象来解决它sub_function(),但我觉得应该有一个更好的更简洁的方法:

def test_poll():
    class MyMock(object):                                                      

        def __init__(self, *args):                                             
            self.call_count = 0                                                

        def sub_function(self, *args, **kwargs):                             
            if self.call_count > 1:                                            
                return "data"            
            else:                                                              
                self.call_count += 1                                           
                return None  

    my_mock = MyMock()                                                         
    with patch('sub_function', my_mock.sub_function):           
        ok_(poll_function())         
Run Code Online (Sandbox Code Playgroud)

python mocking

35
推荐指数
1
解决办法
2万
查看次数

Pylint:禁用特定文件夹的特定警告

我们有一个像这样的Python项目:

project/
??? .pylintrc
??? module1.py
??? module2.py
??? tests/
    ??? test_module1.py
    ??? test_module2.py
Run Code Online (Sandbox Code Playgroud)

我们的单元和功能测试位于名为的文件夹中tests/.当谈到测试pylint的警告missing-docstring,invalid-name并且protected-access是不相关的.另一方面,这些警告对项目中的实际代码非常有用.

我的问题是,它是否可以添加会忽略missing-docstring,invalid-name并且protected-access.pylintrc应用到模块的-file tests/-folder

如果可能,我们不希望将#这些警告的-disables 添加到文件夹内的每个测试模块.

python pylint

17
推荐指数
1
解决办法
2788
查看次数

如何在Buildbot步骤中"获取"环境?

在Buildbot中,我需要能够在编译步骤之前"获取"环境.

如果我使用bash从命令行构建应用程序,我将不得不这样做:

. envrionment-set-up-script
build_command
Run Code Online (Sandbox Code Playgroud)

在build bot master.cfg文件中,我尝试了以下内容:

factory.addStep(ShellCommand(command=["source","environment-set-up-script"])
factory.addStep(ShellCommand(command=[".","environment-set-up-script"]))
factory.addStep(Configure(command=["source","environment-set-up-script"]))
factory.addStep(Configure(command=[".","environment-set-up-script"]))
Run Code Online (Sandbox Code Playgroud)

所有这些都失败了,这是因为无法找到命令,这是有道理的,因为它是一个内置的bash.

此外,我不认为这是正确的方法,因为在调用工厂的下一步时不一定会使用环境.

buildbot

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

实现All/Universal集

为了简化我的代码,我想实现一个包含所有内容的集合.我认为解决这个问题的最简单方法是使用一个自定义集,为任何查询返回True.在我的特定情况下,我最感兴趣的是集合的交叉,以便满足以下条件:

u_set = UniversalSet()
u_set & {1, 2, 3} == {1, 2, 3}  # (1)
{1, 2, 3} & u_set == {1, 2, 3}  # (2)
Run Code Online (Sandbox Code Playgroud)

UniversalSet按以下方式进行了子类化:

class UniversalSet(set):
    def __and__(self, other):
        return other
Run Code Online (Sandbox Code Playgroud)

这适用于__intersect__,但set仍然失败.是否有同样简单的(1)工作方式?

python set

7
推荐指数
1
解决办法
964
查看次数

标签 统计

python ×3

buildbot ×1

mocking ×1

pylint ×1

set ×1