我可以用鼻子嵌套测试用例吗?

mju*_*ewu 5 python testing bdd nose

我已经成为像 RSpec 和 Jasmine 这样的嵌套测试用例上下文的粉丝,我想知道是否有任何 Nose 插件实现了一个测试查找器,允许您将类作为上下文嵌套。结果测试将类似于以下内容:

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)
Run Code Online (Sandbox Code Playgroud)

在上面的假设情况下,system_state.initialize()会在每次测试之前调用。我知道有 PyVows 可以做这样的事情,它看起来不错,但我正在寻找一些东西来插入我当前的项目,该项目已经有许多单元测试/鼻子风格的测试。

dbn*_*dbn 4

听起来您希望某些测试继承其他测试的设置代码:

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)
Run Code Online (Sandbox Code Playgroud)

执行此操作时要小心;如果您在父类中有实际的测试方法,那么它们也会在子类运行时执行(当然)。当我这样做时,我喜欢制作仅提供 setUp、tearDown 和 classSetup/classTearDown 的纯父测试类。

这应该允许您任意级别的嵌套,尽管一旦您这样做,您将需要单元测试来进行单元测试......