From 1dae8530d1f3eb943212c54c4eff2c9d41d019fc Mon Sep 17 00:00:00 2001 From: Anatoly Korobov Date: Mon, 6 Dec 2021 17:26:51 +0300 Subject: [PATCH] Update tests and assert messages MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Обновлены тесты и assert сообщения. --- tests/conftest.py | 7 +--- tests/test_homework.py | 83 ++++++++++++++++-------------------------- 2 files changed, 32 insertions(+), 58 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index d8123d1a4..d14bf8847 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -23,10 +23,5 @@ def __enter__(self): def __exit__(self, *args): self.extend(self._stringio.getvalue().splitlines()) - del self._stringio # free up some memory + del self._stringio sys.stdout = self._stdout - - -def pytest_make_parametrize_id(config, val): - return repr(val) - diff --git a/tests/test_homework.py b/tests/test_homework.py index d4a82a090..ba3afb85e 100644 --- a/tests/test_homework.py +++ b/tests/test_homework.py @@ -1,3 +1,4 @@ +import re import pytest import types import inspect @@ -7,8 +8,9 @@ import homework except ModuleNotFoundError: assert False, 'Не найден файл с домашней работой `homework.py`' -except NameError: - assert False, 'Файл с домашней работой должен называться `homework.py`' +except NameError as exc: + name = re.findall("name '(\w+)' is not defined", str(exc))[0] + assert False, f'Класс {name} не обнаружен в файле домашней работы.' except ImportError: assert False, 'Не найден файл с домашней работой `homework.py`' @@ -19,10 +21,10 @@ def test_read_package(): 'входящего пакета - `read_package`' ) assert callable(homework.read_package), ( - '`read_package` должна быть функцией.' + 'Проверьте, что `read_package` - это функция.' ) assert isinstance(homework.read_package, types.FunctionType), ( - '`read_package` должна быть функцией.' + 'Проверьте, что `read_package` - это функция.' ) @@ -40,9 +42,8 @@ def test_read_package_return(input_data, expected): def test_InfoMessage(): - assert hasattr(homework, 'InfoMessage'), 'Создайте класс `InfoMessage`' assert inspect.isclass(homework.InfoMessage), ( - '`InfoMessage` должен быть классом.' + 'Проверьте, что `InfoMessage` - это класс.' ) info_message = homework.InfoMessage info_message_signature = inspect.signature(info_message) @@ -79,12 +80,12 @@ def test_InfoMessage(): ]) def test_InfoMessage_get_message(input_data, expected): info_message = homework.InfoMessage(*input_data) - assert callable(info_message.get_message), ( - 'Создайте метод `get_message` в классе `InfoMessage`.' - ) assert hasattr(info_message, 'get_message'), ( 'Создайте метод `get_message` в классе `InfoMessage`.' ) + assert callable(info_message.get_message), ( + 'Проверьте, что `get_message` в классе `InfoMessage` - это метод.' + ) result = info_message.get_message() assert isinstance(result, str), ( 'Метод `get_message` в классе `InfoMessage`' @@ -102,9 +103,8 @@ def test_InfoMessage_get_message(input_data, expected): def test_Training(): - assert hasattr(homework, 'Training'), 'Создайте класс `Training`' assert inspect.isclass(homework.Training), ( - '`Training` должен быть классом.' + 'Проверьте, что `Training` - это класс.' ) training = homework.Training training_signature = inspect.signature(training) @@ -140,12 +140,12 @@ def test_Training_get_distance(input_data, expected): 'Создайте метод `get_distance` в классе `Training`.' ) result = training.get_distance() - assert isinstance(result, float), ( + assert type(result) == float, ( 'Метод `get_distance` в классе `Trainig`' 'должен возвращать значение типа `float`' ) assert result == expected, ( - 'Проверьте корректность формулы подсчета дистанции класса `Training`' + 'Проверьте формулу подсчета дистанции класса `Training`' ) @@ -160,13 +160,13 @@ def test_Training_get_mean_speed(input_data, expected): 'Создайте метод `get_mean_speed` в классе `Training`.' ) result = training.get_mean_speed() - assert isinstance(result, float), ( + assert type(result) == float, ( 'Метод `get_mean_speed` в классе `Training`' 'должен возвращать значение типа `float`' ) assert result == expected, ( - 'Проверьте формулу подсчета средней скорости движения ' - 'класса `Training`' + 'Проверьте формулу подсчёта средней скорости движения ' + 'в классе `Training`' ) @@ -181,7 +181,7 @@ def test_Training_get_spent_calories(input_data): 'Создайте метод `get_spent_calories` в классе `Training`.' ) assert callable(training.get_spent_calories), ( - '`get_spent_calories` должна быть функцией.' + 'Проверьте, что `get_spent_calories` - это функция.' ) @@ -208,7 +208,7 @@ def mock_get_spent_calories(): def test_Swimming(): assert hasattr(homework, 'Swimming'), 'Создайте класс `Swimming`' assert inspect.isclass(homework.Swimming), ( - '`Swimming` должен быть классом.' + 'Проверьте, что `Swimming` - это класс.' ) assert issubclass(homework.Swimming, homework.Training), ( 'Класс `Swimming` должен наследоваться от класса `Training`.' @@ -236,15 +236,9 @@ def test_Swimming(): ]) def test_Swimming_get_mean(input_data, expected): swimming = homework.Swimming(*input_data) - assert hasattr(swimming, 'get_mean_speed'), ( - 'Создайте метод `get_mean_speed` в классе `Swimming`.' - ) result = swimming.get_mean_speed() - assert isinstance(result, float), ( - 'Метод `get_mean_speed` в классе `Swimming` ' - 'должен возвращать значение типа `float`' - ) assert result == expected, ( + 'Переопределите метод `get_mean_speed` в классе `Swimming`. ' 'Проверьте формулу подсчёта средней скорости в классе `Swimming`' ) @@ -256,13 +250,9 @@ def test_Swimming_get_mean(input_data, expected): ]) def test_Swimming_get_spent_calories(input_data, expected): swimming = homework.Swimming(*input_data) - assert hasattr(swimming, 'get_spent_calories'), ( - 'Создайте метод `get_spent_calories` в классе `Swimming`.' - ) result = swimming.get_spent_calories() - assert isinstance(result, float), ( - 'Метод `get_spent_calories` класса `Swimming` ' - 'должен возвращать значение типа `float`' + assert type(result) == float, ( + 'Переопределите метод `get_spent_calories` в классе `Swimming`.' ) assert result == expected, ( 'Проверьте формулу расчёта потраченных калорий в классе `Swimming`' @@ -272,7 +262,7 @@ def test_Swimming_get_spent_calories(input_data, expected): def test_SportsWalking(): assert hasattr(homework, 'SportsWalking'), 'Создайте класс `SportsWalking`' assert inspect.isclass(homework.SportsWalking), ( - '`SportsWalking` должен быть классом.' + 'Проверьте, что `SportsWalking` - это класс.' ) assert issubclass(homework.SportsWalking, homework.Training), ( 'Класс `SportsWalking` должен наследоваться от класса `Training`.' @@ -294,13 +284,9 @@ def test_SportsWalking(): ]) def test_SportsWalking_get_spent_calories(input_data, expected): sports_walking = homework.SportsWalking(*input_data) - assert hasattr(sports_walking, 'get_spent_calories'), ( - 'Создайте метод `get_spent_calories` в классе `SportsWalking`.' - ) result = sports_walking.get_spent_calories() - assert isinstance(result, float), ( - 'Метод `get_spent_calories`класса `SportsWalking` ' - 'должен возвращать значение типа`float`' + assert type(result) == float, ( + 'Переопределите метод `get_spent_calories` в классе `SportsWalking`.' ) assert result == expected, ( 'Проверьте формулу подсчёта потраченных ' @@ -310,18 +296,12 @@ def test_SportsWalking_get_spent_calories(input_data, expected): def test_Running(): assert hasattr(homework, 'Running'), 'Создайте класс `Running`' - assert inspect.isclass(homework.Running), '`Running` должен быть классом.' + assert inspect.isclass(homework.Running), ( + 'Проверьте, что `Running` - это класс.' + ) assert issubclass(homework.Running, homework.Training), ( 'Класс `Running` должен наследоваться от класса `Training`.' ) - running = homework.Running - running_signature = inspect.signature(running) - running_signature_list = list(running_signature.parameters) - for param in ['action', 'duration', 'weight']: - assert param in running_signature_list, ( - 'У метода `__init__` класса `Running` ' - f'должен быть параметр {param}.' - ) @pytest.mark.parametrize('input_data, expected', [ @@ -335,9 +315,8 @@ def test_Running_get_spent_calories(input_data, expected): 'Создайте метод `get_spent_calories` в классе `Running`.' ) result = running.get_spent_calories() - assert isinstance(result, float), ( - 'Метод `get_spent_calories` класса `Running` ' - 'должен возвращать значение типа `float`' + assert type(result) == float, ( + 'Переопределите метод `get_spent_calories` в классе `Running`.' ) assert result == expected, ( 'Проверьте формулу расчёта потраченных калорий в классе `Running`' @@ -348,9 +327,9 @@ def test_main(): assert hasattr(homework, 'main'), ( 'Создайте главную функцию программы с именем `main`.' ) - assert callable(homework.main), '`main` должна быть функцией.' + assert callable(homework.main), 'Проверьте, что `main` - это функция.' assert isinstance(homework.main, types.FunctionType), ( - '`main` должна быть функцией.' + 'Проверьте, что `main` - это функция.' )