所以我想测试一个装饰器,它给你一个准备好的协程(所以我不必做coroutine.send(无)
)。
详情可以在这里找到。大卫·比兹利的例子)
因此,在conftest.py中,我创建了一个函数包装器,它是一个pytest夹具,如果有意义的话,它将为我提供一个原始的协程。
我这样做的原因是因为pytest会把任何在收益关键字之后的东西作为拆卸代码,我不想这样。所以我自己包装了一个原始协程。
@pytest.fixture(scope="module")
def create_coroutine_func():
def grep(pattern):
print "Looking for %s" % pattern
while True:
line = (yield)
if pattern in line:
print line
return grep
现在,在我的测试文件中,我有一个相当简单的测试:
from something.decorators import *
import pytest
1 def test_coroutine(create_coroutine_func):
2 coro_func = create_coroutine_func()
3 coro_wrapper = coroutine(coro_func)
4
5 assert callable(coro_wrapper)
好了,就这样。pytest投诉:
create_coroutine()缺少1个必需的位置参数:“pattern”
然后我继续编辑第2行:
coro_func = create_coroutine_func("python") # match anything has 'python' in it.
现在测试通过了。
现在我有点搞不懂装修工了。
所以在我的例子grep需要一个参数;当我调用grep函数包装器时,我需要给函数包装器一个参数,尽管它本身不需要任何参数?这就是装修工的工作方式吗?
UPD:正如@jacques kvam在评论中指出的,当您将一个fixture作为参数传递到测试函数中时,fixture的返回值就是参数的值。因此,在您的例子中,第2行create\u coroutine\u func
是grep
。
这种对pytest夹具的误解可能是错误使用测试函数本身中的值的主要原因。
一旦这一点清楚了,下面是我最初的答案:
在这里,您在第2行的create_coroutine_func()
中调用函数。这就是为什么它期望传递参数。
如果要将函数包装到装饰器中,您实际需要的是对函数对象本身进行操作。它不调用它,而是将其作为值传递给装饰器:
def test_coroutine(create_coroutine_func):
coro_wrapper = coroutine(create_coroutine_func)
assert callable(coro_wrapper)
coro_wrapper("python")
装饰器就是这样工作的:它们将一个函数作为参数,并返回另一个(或相同)函数作为结果。
附言:同样的测试可以用更好的语法编写:
from something.decorators import *
import pytest
def test_coroutine(create_coroutine_func):
@coroutine
def grep(pattern):
print "Looking for %s" % pattern
while True:
line = (yield)
if pattern in line:
print line
assert callable(grep)
grep("python")
注意,decorator的用法在测试内部。因此,如果出现任何错误,测试将正常失败,而不是pytest的模块导入(如果在模块级别声明修饰的函数,则会发生这种情况,您可能已经注意到)。
问题内容: 我通常对JOINS十分熟悉,但这是新的。 假设三个表(两个表的典型情况和第三个链接器表): (出于简化目的,我无法复制实际的结构,这不是我的代码。) 通常,要获得“谁在什么时候买了什么”的表格,我可以这样做: 但是我已经看到了这个: 这是什么?只是另一种语法,还是一种性能技巧? (它在SQLServer,FYI上,但是大概可以应用于其他…) 问题答案: 括号不会改变语义。子句的位置控制
在unittest中,我可以在一个类中设置变量,然后这个类的方法可以选择它想要使用的任何变量... 所以在unittest中,很容易将一组测试放在一起,这些测试可以放在一个类下,然后为不同的方法使用许多不同的变量(varA和varB)。在pytest中,我在conftest.py中创建了一个fixture,而不是在unittest中创建了一个类,如下所示。。。 对于两个不同的函数,我在不同的文件中
本文向大家介绍Python装饰器语法糖,包括了Python装饰器语法糖的使用技巧和注意事项,需要的朋友参考一下 Python装饰器语法糖代码示例 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对呐喊教程的支持。如果你想了解更多相关内容请查看下面相关链接
我使用JMH对DOM解析器进行基准测试。我得到了非常奇怪的结果,因为第一次迭代实际上比后面的迭代运行得更快 有人能解释为什么会这样吗?此外,百分位数和所有数字意味着什么?为什么在第三次迭代后它开始变得稳定?一次迭代是否意味着整个基准测试方法的一次迭代?下面是我正在运行的方法
例如: 测试。xml 案例#1:当我运行下面的特性文件时,它会正常执行并行测试: 有些事。特色 案例#2:当我使用“场景大纲”执行相同的场景时,并行测试同时进行,即使并行测试配置是在TestNG xml文件中设置的。 something2.feature 有人知道为什么QMETRY框架会出现这种情况吗?
问题 很长一段时间以来,我的印象是使用嵌套的