2012-05-17 1 views
1

У меня есть два файла с модульными тестами, а тесты второго файла распространяются и переопределяют некоторые тесты в первом файле.Выполнение только тестов определенного файла

Иллюстрирование с очень упрощенным примером. Там в tests1.py:

import unittest 

class A(unittest.TestCase): 
    def setUp(self): 
     print "setup stuff A" 

    def test_stuff(self): 
     print "test stuff A" 

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

И tests2.py:

import unittest 
from tests1 import A 

class B(A): 
    def setUp(self): 
     print "setup stuff B" 

    def test_stuff(self): 
     print "test stuff B" 

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

Я хочу, чтобы иметь возможность запускать каждый файл самостоятельно, или запустить весь набор файлов в одном пакете. И я не хочу вручную создавать разные комплекты, в которых я должен вручную указать набор тестов для запуска ...

Однако ... В приведенном выше примере, когда я запускаю python tests2.py, тесты tests1.py также побежали! И когда я запускаю их всех в партию, они бегают дважды. Я понимаю, что это происходит, потому что я импортирую A из tests2.py. Как я могу избежать этого? Есть ли лучшая практика для этого, за которой я должен следовать?

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

ответ

2

Сплит из общего кода в другой класс, который не наследует от unittest.TestCase:

class Parent(object): 
    pass # common stuff goes here 

class A(Parent, unittest.TestCase): 
    pass # A stuff here 

class B(Parent, unittest.TestCase): 
    pass # B stuff here 
+0

выполнимо, даже если не идеально ... как будет новый '' Parent'' класс для каждой пары классы '' A'' и '' B''. Мне нужна совместная тестовая реализация для нескольких десятков случаев, поэтому будет много новых классов. –

+0

Я отредактировал ваш пример, чтобы в '' A'' и '' B'' мы могли переопределить setUp(), определенный в '' Parent''. В противном случае TestCase.setUp() вызывается при вызове super() вместо предполагаемого Parent.setUp() –

Смежные вопросы