Django测试全局设置

时间:2014-08-22 15:33:58

标签: python django unit-testing

我有一些用django进行单元测试的文件:

test1.py

class Test1(unittest.TestCase):
    def setUp(self):
        ...

    def tearDown(self):
        ...

test1.py

class Test1(unittest.TestCase):
    def setUp(self):
       ...

    def tearDown(self):
        ...

testn.py

class Testn(unittest.TestCase):
    def setUp(self):
       ...

    def tearDown(self):
        ...

我想创建一个全局设置来为所有测试做一些配置,例如:

some_file.py

class GlobalSetUpTest(SomeClass):
    def setup(self): # or any function name
         global_stuff = "whatever"

可能吗?如果是这样,怎么样?提前谢谢。

2 个答案:

答案 0 :(得分:7)

您可以使用自定义全局setUp方法创建父类,然后让所有其他测试类扩展该类:

class MyTestCase(unittest.TestCase):
    def setUp(self):
        self.global_stuff = "whatever"


class TestOne(MyTestCase):
    def test_one(self):
        a = self.global_stuff 


class TestTwo(MyTestCase):
    def setUp(self):
        # Other setUp operations here
        super(TestTwo, self).setUp() # this will call MyTestCase.setUp to ensure self.global_stuff is assigned.

    def test_two(self):
        a = self.global_stuff

显然,您可以对“全局”tearDown方法使用相同的技术。

答案 1 :(得分:0)

如果您希望所有测试仅运行一次,则可以通过在其中一个应用中放置management/commands/test.py来覆盖测试管理命令:

from django.core.management.commands import test

class Command(test.Command):
    def handle(self, *args, **options):
        # Do your magic here
        super(Command, self).handle(*args, **options)

不幸的是,这不适用于PyCharm。 在PyCharm中,您可以改为使用“ Before Lunch”任务。