2012-01-07 67 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

相关问题