说我有以下测试类:
# file tests.py
class MyTests(object):
nose_use_this = True
def test_something(self):
assert 1
我可以轻松编写一个在该测试之前运行的插件:
class HelloWorld(Plugin):
# snip
def startTest(self, test):
import ipdb; ipdb.set_trace()
测试是我想要的,但test
的类型是nose.case.Test
:
ipdb> str(test)
'tests.MyTests.test_something'
ipdb> type(test)
<class 'nose.case.Test'>
我看不到任何可以让我获得我在TestCase-ish类中定义的nose_use_this
属性的内容。
答案 0 :(得分:1)
编辑:
我认为最好的方法是使用startContext
/ stopContext
方法对访问上下文,并在那里设置实例的属性:
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”被调用(至少)模块和类,但如果唯一可以设置属性的地方是在类上那么我认为这个简单的事情应该有效。它似乎对我有用。 (鼻子1.3.0和插件api版本0.10)
原:
哦,这是_context()
实例上的test
函数:
ipdb> test._context()
<class 'tests.MyTests'>
它确实具有预期的类级属性。我仍然愿意采用更好的方法,_
让我觉得鼻子不希望我把它作为API的一部分。