gpt4 book ai didi

python - Nosetest 生成器方法行为

转载 作者:太空宇宙 更新时间:2023-11-04 03:36:13 25 4
gpt4 key购买 nike

我正在尝试编写一个包含生成器的测试类,并使用 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'

我猜这与 Nose 将测试彼此隔离是某种方式有关。除了将所有必需的变量显式地而不是隐式地作为 self 上的属性传递给方法之外,是否有一些解决方法?

明确地说,我知道如何在“标准”Python 中分配属性。那不是我要问的。我想知道的是如何使用 nosetests 命令在 nosetests 测试运行中实现所需的行为。


根据 Tanveer's建议我可以添加一个 __init__ 方法来初始化属性。这是一个解决方法,但它确实回答了我最初提出的问题。

然而,我最终想要做的是遍历 yield 语句,修改 self 上的属性值,并将该修改注册到 self 的值中在 check 方法中。添加 __init__ 不允许我这样做。

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 runner 似乎仍然强制执行某种类型的方法级隔离。所以我想更深入地挖掘以了解发生了什么。有没有办法以正常方式共享 self 变量的属性?

最佳答案

简短的回答是否定的,您不能使用类的实例变量传递状态。在点击类方法的 yield 时,nose 总是会找出该方法属于哪个类,并将创建此类的一个新实例,该实例将没有您倾向于在当前测试生成类实例上设置的属性(参见 nose lines that actually do that) .一种解决方案可能是使用类变量来传递您想要的信息,如下所示:

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

但我会建议调查 nose-parameterized plugin ,它实现了您在此处尝试实现的一些魔力。

关于python - Nosetest 生成器方法行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28922816/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com