Python 测试生成器方法性能
我试图编写一个包含生成器的测试类,并使用Python 测试生成器方法性能,python,generator,nosetests,Python,Generator,Nosetests,我试图编写一个包含生成器的测试类,并使用nosetests运行测试。但是,nosetests测试运行程序似乎隔离了测试类中的方法,因此它们不共享相同的self,这让我感到困惑: class Test(object): def check(self): print self.one def test(self): self.one = 1 yield self.check 这给了我以下错误: AttributeError: 'T
nosetests
运行测试。但是,nosetests
测试运行程序似乎隔离了测试类中的方法,因此它们不共享相同的self
,这让我感到困惑:
class Test(object):
def check(self):
print self.one
def test(self):
self.one = 1
yield self.check
这给了我以下错误:
AttributeError: 'Test' object has no attribute 'one'
我猜这与鼻子有关,某种程度上,把测试彼此隔离开来。除了将所有必需的变量显式地传递给方法而不是隐式地作为self
上的属性传递给方法之外,还有其他解决方法吗
为了清楚起见,我知道如何在“标准”Python中分配属性。这不是我要问的。我想知道的是如何使用nosetests
命令在nosetests
测试运行中实现所需的行为
根据建议,我可以添加一个
\uuuu init\uuu
方法来初始化属性。这是一个解决办法,但它确实回答了我最初提出的问题
但是,我最终想要做的是在yield语句上循环,修改self
上的属性值,并在check
方法中的self
值中注册修改寄存器。添加一个\uuuu init\uuuu
不允许我这样做
class Test(object):
def __init__(self):
self.one = None
def check(self):
print self.one
def test(self):
self.one = 1
yield self.check
我得到:
$ nosetests nosetest-with-classes.py --nocapture
None
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
nosetests运行程序似乎仍在实施某种方法级隔离。所以我想再深入一点了解一下发生了什么。是否有办法以正常方式共享
self
变量的属性?简单的回答是否,您不能使用类的实例变量传递状态。在达到类方法的收益率时,nose将始终确定该方法属于哪个类,并将创建该类的新实例,该实例将不具有您倾向于在当前测试生成类实例上设置的属性(请参阅)。一种解决方案可能是使用类变量来传递所需的信息,如下所示:
class Test(object):
def check(self):
print self.one # here it really refers to Test.one
def test(self):
Test.one = 1
yield self.check
但我建议您研究一下,它确实实现了您在这里试图实现的一些魔力。您可以包括
\uuuu init\uuuu
方法,并使用one
作为参数初始化您的实例。