как повторно использовать тесты, написанные с помощью unittest.testcase

89
8

Я написал несколько тестов, используя unittest, как показано ниже, и я хочу повторно использовать их в другом классе, где я застрял и нуждаюсь в помощи. Ниже приведены фрагменты кода.

    MyTestClass.py
Class MyTestClass(unittest.TestCase):
@classmethod
def test_TC01_set(self):
self.devAddr = "127.0.0.0"
self.teststoSkip = 'TC02'

def skip(type):
if type in self.teststoSkip:
self.skipTest('skipped!!') #unittest.Testcase method

def test_TC02(self):
self.skip('TC02')
print 'test_TC02 will do other tasks'

def test_TC03(self):
self.skip('TC03')
print 'test_TC03 will do other tasks'

Это будет работать нормально. Теперь я хочу повторно использовать те же тестеры в другом классе. сказать,

    RegressionMyTest.py
from MyTestClass import MyTestClass
Class RegressionMyTest(MyTestClass):
@classmethod
def setupmytest(self):
self.test_TC01_set(self)#this will work fine since it is accessing classmethod
self.tes_TC02(self)#cant access like this since it is not a class method
self.tes_TC03(self)#cant access like this since it is not a class method

Как я могу повторно использовать тесты в MyTestClass в RegressionMyTest, чтобы работать как MyTestClass, так и RegressionMyTest, если они запускаются индивидуально, используя nosetests/unittest.

спросил(а) 2021-01-25T16:46:17+03:00 5 месяцев назад
1
Решение
89

Обычно тесты предполагают, что код функционирует определенным образом, поэтому я не уверен, имеет ли смысл фактически делиться тестами между testuites (я не думаю, что это было бы очень явным)

Случаи тестов Python - это просто классы python, которые проверяются тестовым runner для методов, начинающихся в test_. Из-за этого вы можете использовать наследование так же, как и с обычными классами.

Если вам нужна общая функциональность, вы можете создать базовый класс с общими методами инициализации/вспомогательными методами. Или создайте тестовые миксины с полезными функциями, которые необходимы для тестирования.

class BasetTestCase(unittest.TestCase):
def setUp(self):
# ran by all subclasses

def helper(self):
# help

class TestCaseOne(BaseTestCase):

def setUp(self):
# additional setup
super(TestCaseOne, self).setUp()

def test_something(self):
self.helper() # <- from base

Возможно, вы не хотите определять метод установки в базовом классе и просто определять на дочерних классах, используя некоторые вспомогательные методы, определенные в базовом классе? Множество вариантов!

ответил(а) 2021-01-25T16:46:17+03:00 5 месяцев назад
45

Я не думаю, что ваше название правильно описывает ваш вопрос. Ошибка вашего кода: вызов родительского класса "метод объекта" в дочернем "методе класса" (метод @classmethod), поскольку "метод объекта" должен иметь один экземпляр класса (объект), поэтому в методе класса "ребенок" система может найти любой экземпляр объекта для своего родительского класса.


Вам просто нужно пересмотреть понятия "методы класса" и "методы объекта" (или методы экземпляра) на языке программирования.

ответил(а) 2021-01-25T16:46:17+03:00 5 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема