У меня вопрос Python
/ OOP
.
Вы все знакомы с проблемой алмазов в C++
верно? Это что-то похожее.
У меня есть следующие классы
class BaseAuth(TestCase):
def setUp(self):
# create dummy user and client, removing code of that for simplicity.
self.user.save()
self.client.save()
def _get_authenticated_api_client(self):
pass
class TokenAuthTests(BaseAuth):
def _get_authenticated_api_client(self):
super()._get_authenticated_api_client()
print("I AM IN TOKEN AUTH")
api_client = APIClient()
# do stuff with api_client
return api_client
class BasicAuthTests(BaseAuth):
def _get_authenticated_api_client(self):
super()._get_authenticated_api_client()
print("I AM IN BASIC AUTH")
api_client = APIClient()
# do stuff with api client
return api_client
class ClientTestCase(BasicAuthTests, TokenAuthTests):
def test_get_login_response(self):
api_client = self._get_authenticated_api_client()
# login test code
def test_get_clients(self):
api_client = self._get_authenticated_api_client()
# get client test code
def test_get_client_by_id(self):
api_client = self._get_authenticated_api_client()
# get client by id test code
def test_update_client_by_id(self):
api_client = self._get_authenticated_api_client()
# update client test code
def test_add_client(self):
api_client = self._get_authenticated_api_client()
# add client test code
def test_delete_client_by_id(self):
api_client = self._get_authenticated_api_client()
# delete client test code
Теперь, когда я запускаю код, я вижу, что это распечатано:
I AM IN TOKEN AUTH
I AM IN BASIC AUTH
.I AM IN TOKEN AUTH
I AM IN BASIC AUTH
.I AM IN TOKEN AUTH
I AM IN BASIC AUTH
.I AM IN TOKEN AUTH
I AM IN BASIC AUTH
.I AM IN TOKEN AUTH
I AM IN BASIC AUTH
.I AM IN TOKEN AUTH
I AM IN BASIC AUTH
Но еслиЯ вижу функциональность, тесты выполняются только для BasicAuthTests
. Откуда я знаю это?
1. Количество тестовых прогонов равно 6
, когда оно должно быть 12
, 6
для каждого родительского класса.
2. Если яизмените функцию _get_authenticated_api_client()
в BasicAuthTests
на неправильный тип return
, код вылетает, но если я изменю его в TokenAuthTests
, ничего не произойдет, что означает, что TokenAuthTests
ничего не делает, но его оператор print в работечто означает, что функция вызывается.
Это так запутанно, может кто-нибудь помочь?
Моя конечная цель - запустить эти 6 тестов для каждого из возвращенных родительских классов api_client
.
ЗДЕСЬ ДОЛЖЕН ЗАМЕТИТЬ, ЧТО КОД ОТКРЫЛ. И ТЕСТ РАБОТАЕТ ВСЕГДА, ЕСЛИ Я ИСПОЛЬЗУЮ ИХ ОТДЕЛЬНО. Я пытаюсь упростить код и удалить все повторения, поэтому я хочу попробовать слить их в один файл.