小编Ste*_*ude的帖子

使用Python mock重复调用函数

我想测试一个递归函数然后模拟相同的函数.对于第一个调用,我想实际调用我的模块中出现的函数.当它自己调用时,我想使用mock来模拟调用,并指定第二个递归调用的返回值.

我的意思是一个非常简单的例子:

def some_function(input_value):
    if input_value == some_appropriate_value:
        return foo
    else:
        return some_function(some_other_value)
Run Code Online (Sandbox Code Playgroud)

some_function第二次调用它时如何模拟?如果我使用类似@ mock.patch装饰器的东西,我实际上无法测试它,因为some_function 将被模拟为所有调用.

有关如何做到这一点的任何建议?我找不到任何明显的Stack Overflow问题来讨论这个问题.

mocking python-2.7

5
推荐指数
1
解决办法
1162
查看次数

Python中的参数命名约定

对于具有密切相关的形式参数的函数,例如

def add_two_numbers(n1, n2):
    return n1 + n2

def multiply_two_numbers(n1, n2):
    return n1 * n2
Run Code Online (Sandbox Code Playgroud)

如上所示,给两个函数中的参数赋予相同的名称是一个好主意吗?

另一种方法是重命名其中一个函数中的参数.例如:

def add_two_numbers(num1, num2):
    return num1 + num2
Run Code Online (Sandbox Code Playgroud)

在两个函数中保持相同看起来更加一致,因为每个函数所采用的参数都是类似的,但更令人困惑的是?

同样,对于下面的例子哪个更好?

def count(steps1, steps2):
    a = 0
    b = 0

    for i in range(steps1):
        a += 1

    for j in range(steps2):
        b += 1

    return a, b

def do_a_count(steps1, steps2):
    print "Counting first and second steps..."
    print count(steps1, steps2)
Run Code Online (Sandbox Code Playgroud)

否则,更改第二个函数中的参数会给出:

def do_a_count(s1, s2):
    print "Counting first and second steps..."
    print count(s1, s2)
Run Code Online (Sandbox Code Playgroud)

再说一遍,我不确定哪种方式最好.保持相同的参数名称使两个函数之间的关系更清晰,而第二个意味着不可能在两个函数中混淆参数.

我做了一些搜索(包括浏览PEP-8),但找不到明确的答案.(我发现的类似问题包括: python函数中的可选参数的命名练习 …

python coding-style naming-conventions

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

pytest.main(' - s')应该运行两次测试吗?

我刚开始学习测试,所以我刚开始尝试使用py.test组合并运行一些非常简单的单元测试.

示例test_script.py:

import pytest

def test_func():
    assert True

pytest.main('-v')
Run Code Online (Sandbox Code Playgroud)

运行这个给出:

============================= test session starts ==============================
platform win32 -- Python 3.3.1 -- pytest-2.3.4 -- C:\Program Files (x86)\Python33\python.exe
collecting ... collected 1 items

test_script.py:3: test_func PASSED
=========================== 1 passed in 0.12 seconds ===========================
Run Code Online (Sandbox Code Playgroud)

如果我更换-v-s查看标准输出(和禁用标准输出的pytest捕获),测试运行两次:

============================= test session starts ==============================
platform win32 -- Python 3.3.1 -- pytest-2.3.4
============================= test session starts ==============================
platform win32 -- Python 3.3.1 -- pytest-2.3.4
collected 1 items

test_script.py .

=========================== 1 passed …
Run Code Online (Sandbox Code Playgroud)

python pytest python-3.x

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