2013-09-24 68 views
1

說我有以下測試類:是否可以從鼻子插件訪問類級屬性?

# 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() 

測試是什麼,我希望它是,但類型的testnose.case.Test

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

而且我看不到任何東西,讓我得到的nose_use_this屬性我在我的TestCase-ish類中定義了它。

回答

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)


原:

哦,它是在test實例_context()功能:

ipdb> test._context() 
<class 'tests.MyTests'> 

而且它確實有預期的課堂級別屬性。我仍然樂意以更好的方式做到這一點,_讓我覺得鼻子不希望我把它作爲API的一部分。

相關問題