Python nosetest使用decorators多次运行unittest
我有一个python unittest,它有一个修饰函数。当我使用修饰器运行unittest时,同一个函数会被调用两次 如何防止它再次运行Python nosetest使用decorators多次运行unittest,python,Python,我有一个python unittest,它有一个修饰函数。当我使用修饰器运行unittest时,同一个函数会被调用两次 如何防止它再次运行 import unittest from ast import literal_eval from functools import wraps def log_decorator(f): @wraps(f) def wrapper(self, *args, **kw): print 'process start'
import unittest
from ast import literal_eval
from functools import wraps
def log_decorator(f):
@wraps(f)
def wrapper(self, *args, **kw):
print 'process start'
f(self, *args, **kw)
print 'process end'
return f(self, *args, **kw)
return wrapper
class Correct(object):
def __init__(self, points=None):
self.points = points
@log_decorator
def apply(self):
try:
result = {}
for position, points in self.points.items():
i, j = literal_eval(position)
intr = []
for point in points:
point['x1'] = point['x1'] * 1 + j
point['x2'] = point['x2'] * 1 + j
intr.append(point)
result[position] = intr
except Exception as e:
print 'Exception ==', e
return result
val = {'(0, 100)': [{
'x1': 100.0,
'x2': 200.0,
}]}
class TestPoints(unittest.TestCase):
def setUp(self):
self.coordinates1 = val
def test_points(self):
import pprint
print 'points before == ', pprint.pprint(val)
points = Correct(val).apply()
print 'points after == ', pprint.pprint(val)
if __name__ == '__main__':
unittest.main()
结果:
points before == {'(0, 100)': [{'x1': 100.0, 'x2': 200.0}]}
None
process start
process end
points after == {'(0, 100)': [{'x1': 300.0, 'x2': 400.0}]}
None
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
这个装饰函数是错误的。执行f
两次。一个在两个print
之间,另一个在return
之后
print 'process start'
f(self, *args, **kw) # One
print 'process end'
return f(self, *args, **kw) # Two
更新
正确的方式:
print 'process start'
result = f(self, *args, **kw) # Only once
print 'process end'
return result
这个装饰函数是错误的。执行f
两次。一个在两个print
之间,另一个在return
之后
print 'process start'
f(self, *args, **kw) # One
print 'process end'
return f(self, *args, **kw) # Two
更新
正确的方式:
print 'process start'
result = f(self, *args, **kw) # Only once
print 'process end'
return result
哪个功能?我没有看到任何重复的输出?除了奇怪的
无
…是的,实际上是指无哪个函数?我没有看到任何重复的输出?除了奇怪的无
…是的,实际上是指无