【发布时间】:2013-11-01 22:04:12
【问题描述】:
嘿,我有一个方法定义如下:
from x.y import util
class my_Class(some_object):
@util.myDecorator
def foo(self, log_file):
'''
Test that search entered into the search bar is the search being
executed in the job.
'''
self.some_page.open()
textarea = self.some_page.searchbar
searchbar.run_search(log_file.search_string)
self.browser.capture_screenshot()
self.some_page.jobstatus.wait_for_job_complete()
self.verify_equals(
self.some_page.jobstatus.event_count,
log_file.event_count,
"Event count doesn't seem to be right.")
装饰器在 util.py 文件中
def mydecorator(func):
def timeit(*args, **kwargs):
start_time = time.time()
ret=func(*args, **kwargs)
end_time = time.time()
print end_time - start_time
return ret
return timeit
当我尝试执行代码时,它在ret=func(*args, **kwargs) 失败并显示错误消息
TypeError: foo() 只接受 2 个参数(给定 1 个)
- 我打印了 *args 的内容(使用
','.join(str(each) for each in args))来查看它包含的内容,然后打印出来了
<....my_class ...>
装饰器适用于只有一个 arg (self) 的方法。我在这里错过了什么吗?
【问题讨论】:
-
如何调用
foo方法? my_Class().foo()? -
你是怎么打电话给
foo()的?这有效:my_Class().foo(123)。这不是:my_Class().foo(). -
我正在使用 py.test 调用方法 foo
py.test -k foo file_name.py -
如果你使用 pytest,你必须给这些测试添加参数...
-
请提供完整的失败 pytest 示例。你有多个装饰函数吗?