создание подкласса python unittest.Testcase, вызывающий тот же главный - PullRequest
3 голосов
/ 23 января 2012

Я хотел бы создать подкласс unittest.Testcase в Python, называемый BasicTest. Я бы хотел, чтобы каждый подкласс BasicTest выполнял одну и ту же процедуру в main. Как мне это сделать?

Пример:

in basic_test.py:

class BasicTest(unittest.TestCase):

    ...


if __name__ == '__main__':
    # Do optparse stuff
    unittest.main()



in some_basic_test.py:

class SomeBasicTest(BasicTest):
    ...

if __name__ == '__main__':
    #call the main in basic_test.py

Ответы [ 3 ]

2 голосов
/ 23 января 2012
# basic_test.py
class BasicTest(unittest.TestCase):

  @staticmethod
  def main():
     # Do optparse stuff
     unittest.main()

if __name__ == '__main__':
  BasicTest.main()



# some_basic_test.py
class SomeBasicTest(BasicTest):
   ...

if __name__ == '__main__':
  BasicTest.main()
1 голос
/ 23 января 2012

Я бы хотел, чтобы каждый подкласс BasicTest выполнял одну и ту же подпрограмму в main

Я предполагаю, что вам нужно запустить некоторый код установки / инициализации перед запуском тестов из любого теста.В этом случае вас может заинтересовать setUpClass метод класса.

testA.py

import unittest


class BasicTest(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        print 'Preparing to run tests'


class TestA(BasicTest):

    def test1(self):
        print 'testA: test1'

    def test2(self):
        print 'testA: test2'


if __name__ == '__main__':
    unittest.main()

testB.py

import unittest

from testA import BasicTest


class TestB(BasicTest):

    def test1(self):
        print 'testB: test1'

    def test2(self):
        print 'testB: test2'


if __name__ == '__main__':
    unittest.main()

Вывод из testA.py:

Preparing to run tests
testA: test1
testA: test2
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK

Вывод из testB.py:

Preparing to run tests
testB: test1
testB: test2
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s

OK
1 голос
/ 23 января 2012

Вы не можете (повторно) импортировать модуль как новый основной , поэтому код if __name__=="__main__" недоступен.

Предложение Дора или что-то подобное кажется наиболее разумным. Однако если у вас нет доступа к данному модулю, вы можете рассмотреть runpy.run_module () , который выполняет модуль как основной.

...