python - unittest setUp tearDown在不同的上下文中

时间:2012-05-29 10:12:26

标签: python unit-testing

Deo python支持setUp()和tearDown()的行为取决于上下文?无论如何,我问我是否可以这样做:

setUp() {
    if(context1){
         do A;
    }
    else{
         do B;
    }
}


tearDown() {
    if(context1){
         do A;
    }
    else{
         do B;
    }
}

2 个答案:

答案 0 :(得分:2)

你应该考虑为你需要的每个测试环境做两个不同的类(可能有一些共同的祖先)测试,这会更容易。

这样的事情:

class BaseTest():
    def test_01a(self):
        pass

class Context1TestCase(BaseTest, unittest.TestCase):
    def setUp(self):
        # do what you need for context1

    def tearDown(self):
        # do what you need for context1

class Context2TestCase(BaseTest, unittest.TestCase):
    def setUp(self):
        # do what you need for context2

    def tearDown(self):
        # do what you need for context2

这样,test_01a将在context1中执行一次,在context2中执行一次。

答案 1 :(得分:1)

是的,就像你展示它一样:如果条件为真,则使用if块并仅执行设置的特定部分。

我认为您的目标是为不同的测试设置不同版本的setUptearDown。我实际上建议你:

  • 使用正确的setUp / tearDown方法将测试拆分为不同的TestCase子类
  • 或者根本不使用setUptearDown - 做这样的事情

    class MyTestCase:
        def _setup_for_foo_tests():
            # blah blah blah
        def _setup_for_bar_tests():
            # blah blah blah
        def test_foo_1():
            self._setup_for_foo_tests()
            # test code
        def test_foo_2():
            self._setup_for_foo_tests()
            # test code
        def test_bar_1():
            self._setup_for_bar_tests()
            # test code
        # etc etc etc