可以从nose插件访问类级别的属性吗?

2024-06-26 10:42:53 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下测试类:

# file tests.py
class MyTests(object):
    nose_use_this = True

    def test_something(self):
        assert 1

我可以很容易地编写一个在测试之前运行的插件:

^{pr2}$

测试是我想要的,但是test的类型是nose.case.Test

ipdb> str(test)
'tests.MyTests.test_something'
ipdb> type(test)
<class 'nose.case.Test'>

我看不到任何东西可以让我获得我在TestCase-ish类中定义的nose_use_this属性。在


Tags: pytesttrueobjectuseteststhissomething
1条回答
网友
1楼 · 发布于 2024-06-26 10:42:53

编辑:

我认为最好的方法是使用^{}/^{cd2>}方法对访问上下文,并在其中设置实例的属性:

class MyPlugin(Plugin):
    def __init__(self, *args, **kwargs):
        super(MyPlugin, self).__init__(self, *args, **kwargs)
        self.using_this = None

    def startContext(self, context):
        if hasattr(context, 'nose_use_this'):
            self.using_this = context.nose_use_this

    def stopContext(self, context):
        self.using_this = None

    def startTest(self, test):
        if self.using_this is not None:
            do_something()

为了真正健壮,您可能需要实现一个堆栈,因为“startContext”是为(至少)模块和类调用的,但是如果可以设置属性的唯一地方是在类上,那么我认为这个简单的事情应该有效。似乎对我有用。(Nose 1.3.0和插件api版本0.10)


原始:

哦,它是^{cd4>}实例上的^{cd3>}函数:

^{pr2}$

它确实具有预期的类级属性。我仍然希望有更好的方法来完成这一点,^{cd5>}使我认为nose不希望我将它作为API的一部分来处理。

相关问题 更多 >