Я новичок в модульном тестировании и пытаюсь найти лучшие практики для этого. Я видел здесь несколько вопросов, связанных с модульным тестом, наследующим базовый класс, который сам содержит несколько тестов, например:
class TestBase(unittest.TestCase):
# some standard tests
class AnotherTest(TestBase):
# run some more tests in addition to the standard tests
Я думаю, что я узнал от сообщества, что лучше написать отдельные тесты для каждой реализации и использовать множественное наследование. Но что, если этот базовый класс на самом деле не содержит никаких тестов - просто помощники для всех ваших других тестов. Например, предположим, что у меня есть базовый тестовый класс, который я использовал для хранения некоторых общих методов, которые будут использовать большинство, если не все мои другие тесты. Также предположим, что у меня есть модель базы данных в models.py
под названием ContentModel
test_base.py
import webtest
from google.appengine.ext import testbed
from models import ContentModel
class TestBase(unittest.TestCase):
def setUp(self):
self.ContentModel = ContentModel
self.testbed = testbed.Testbed()
self.testbed.activate()
# other useful stuff
def tearDown(self):
self.testbed.deactivate()
def createUser(self, admin=False):
# create a user that may or may not be an admin
# possibly other useful things
Похоже, это сэкономит мне массу времени на всех остальных тестах:
another_test.py
from test_base import TestBase
class AnotherTest(TestBase):
def test_something_authorized(self):
self.createUser(admin=True)
# run a test
def test_something_unauthorized(self):
self.createUser(admin=False)
# run a test
def test_some_interaction_with_the_content_model(self):
new_instance = self.ContentModel('foo' = 'bar').put()
# run a test
Примечание: это основано на некоторых из моих работ в webapp2 на движке приложений Google, но я ожидаю, что аналогичная ситуация возникает практически для любого веб-приложения на Python.
Мой вопрос
Является ли хорошей практикой использование базового / вспомогательного класса, который содержит полезные методы / переменные, которые наследуются всеми вашими другими тестами, или каждый тестовый класс должен быть «самодостаточным»?
Спасибо!