2012-01-07 66 views
3

我已經成爲RSpec和Jasmine之類的嵌套測試用例上下文的粉絲,我想知道是否有任何實現測試發現者的鼻子插件允許您將類嵌套爲上下文。由此測試看起來像下面這樣:我可以用鼻子嵌套TestCases嗎?

from nose.tools import * 
from mysystem import system_state 

class TestMySystem (TestCase): 
    def setUp(self): 
     system_state.initialize() 

    class WhenItIsSetTo1 (TestCase): 
     def setUp(self): 
      system_state.set_to(1) 

     def test_system_should_be_1 (self): 
      assert_equal(system_state.value(), 1) 

    class WhenItIsSetTo2 (TestCase): 
     def setUp(self): 
      system_state.set_to(2) 

     def test_system_should_be_2 (self): 
      assert_equal(system_state.value(), 2) 

在上述假設的情況下,將system_state.initialize()每次測試之前調用。我知道PyVows可以做這樣的事情,而且看起來不錯,但我正在尋找一些東西來插入我目前的項目,該項目已經有了許多單元測試/鼻子式測試。

回答

2

這聽起來像你想你的一些測試,以從其他測試繼承設置代碼:

from nose.tools import * 
from mysystem import system_state 

class TestMySystem (TestCase): 
    def setUp(self): 
     system_state.initialize() 

class WhenItIsSetTo1 (TestMySystem): 
    def setUp(self): 
     super(WhenItIsSetTo1, self).setUp() 
     system_state.set_to(1) 

    def test_system_should_be_1 (self): 
     assert_equal(system_state.value(), 1) 

class WhenItIsSetTo2 (TestMySystem): 
    def setUp(self): 
     super(WhenItIsSetTo2, self).setUp() 
     system_state.set_to(2) 

    def test_system_should_be_2 (self): 
     assert_equal(system_state.value(), 2) 

要小心,當你做到這一點;如果你在父類中有實際的測試方法,它們也會在孩子運行時執行(當然)。當我這樣做時,我喜歡製作純粹的父級測試類,它只提供setUp,tearDown & classSetup/classTearDown。

這應該允許您嵌套的任意級別,但一旦你做,你會需要單元測試單元測試...

0

不是我所知,但是您可以通過module and package levels的setup和teardown方法獲得類似的效果。

那麼你的榜樣將成爲:

def setup(): 
    system_state.initialize() 

def teardown(): 
    system_state.teardown() 

class WhenItIsSetTo1 (TestCase): 
    def setUp(self): 
     system_state.set_to(1) 

    def test_system_should_be_1 (self): 
     assert_equal(system_state.value(), 1) 

class WhenItIsSetTo2 (TestCase): 
    def setUp(self): 
     system_state.set_to(2) 

    def test_system_should_be_2 (self): 
     assert_equal(system_state.value(), 2) 
+0

謝謝回答。我對模塊級別的燈具瞭如指掌,但我確實在尋找更一般的東西。例如,即使使用模塊固定裝置,我也只限於2個上下文級別(儘管2個級別可以滿足比1個級別更多的情況),並且每當我需要新的上下文時,我都會被迫創建一個新模塊。 – mjumbewu 2012-01-07 18:02:19

相關問題