1+ import re
12import pytest
23import types
34import inspect
78 import homework
89except ModuleNotFoundError :
910 assert False , 'Не найден файл с домашней работой `homework.py`'
10- except NameError :
11- assert False , 'Файл с домашней работой должен называться `homework.py`'
11+ except NameError as exc :
12+ name = re .findall ("name '(\w+)' is not defined" , str (exc ))[0 ]
13+ assert False , f'Класс { name } не обнаружен в файле домашней работы.'
1214except ImportError :
1315 assert False , 'Не найден файл с домашней работой `homework.py`'
1416
@@ -19,10 +21,10 @@ def test_read_package():
1921 'входящего пакета - `read_package`'
2022 )
2123 assert callable (homework .read_package ), (
22- '`read_package` должна быть функцией .'
24+ 'Проверьте, что `read_package` - это функция .'
2325 )
2426 assert isinstance (homework .read_package , types .FunctionType ), (
25- '`read_package` должна быть функцией .'
27+ 'Проверьте, что `read_package` - это функция .'
2628 )
2729
2830
@@ -40,9 +42,8 @@ def test_read_package_return(input_data, expected):
4042
4143
4244def test_InfoMessage ():
43- assert hasattr (homework , 'InfoMessage' ), 'Создайте класс `InfoMessage`'
4445 assert inspect .isclass (homework .InfoMessage ), (
45- '`InfoMessage` должен быть классом .'
46+ 'Проверьте, что `InfoMessage` - это класс .'
4647 )
4748 info_message = homework .InfoMessage
4849 info_message_signature = inspect .signature (info_message )
@@ -79,12 +80,12 @@ def test_InfoMessage():
7980])
8081def test_InfoMessage_get_message (input_data , expected ):
8182 info_message = homework .InfoMessage (* input_data )
82- assert callable (info_message .get_message ), (
83- 'Создайте метод `get_message` в классе `InfoMessage`.'
84- )
8583 assert hasattr (info_message , 'get_message' ), (
8684 'Создайте метод `get_message` в классе `InfoMessage`.'
8785 )
86+ assert callable (info_message .get_message ), (
87+ 'Проверьте, что `get_message` в классе `InfoMessage` - это метод.'
88+ )
8889 result = info_message .get_message ()
8990 assert isinstance (result , str ), (
9091 'Метод `get_message` в классе `InfoMessage`'
@@ -102,9 +103,8 @@ def test_InfoMessage_get_message(input_data, expected):
102103
103104
104105def test_Training ():
105- assert hasattr (homework , 'Training' ), 'Создайте класс `Training`'
106106 assert inspect .isclass (homework .Training ), (
107- '`Training` должен быть классом .'
107+ 'Проверьте, что `Training` - это класс .'
108108 )
109109 training = homework .Training
110110 training_signature = inspect .signature (training )
@@ -140,12 +140,12 @@ def test_Training_get_distance(input_data, expected):
140140 'Создайте метод `get_distance` в классе `Training`.'
141141 )
142142 result = training .get_distance ()
143- assert isinstance (result , float ) , (
143+ assert type (result ) == float , (
144144 'Метод `get_distance` в классе `Trainig`'
145145 'должен возвращать значение типа `float`'
146146 )
147147 assert result == expected , (
148- 'Проверьте корректность формулы подсчета дистанции класса `Training`'
148+ 'Проверьте формулу подсчета дистанции класса `Training`'
149149 )
150150
151151
@@ -160,13 +160,13 @@ def test_Training_get_mean_speed(input_data, expected):
160160 'Создайте метод `get_mean_speed` в классе `Training`.'
161161 )
162162 result = training .get_mean_speed ()
163- assert isinstance (result , float ) , (
163+ assert type (result ) == float , (
164164 'Метод `get_mean_speed` в классе `Training`'
165165 'должен возвращать значение типа `float`'
166166 )
167167 assert result == expected , (
168- 'Проверьте формулу подсчета средней скорости движения '
169- 'класса `Training`'
168+ 'Проверьте формулу подсчёта средней скорости движения '
169+ 'в классе `Training`'
170170 )
171171
172172
@@ -181,7 +181,7 @@ def test_Training_get_spent_calories(input_data):
181181 'Создайте метод `get_spent_calories` в классе `Training`.'
182182 )
183183 assert callable (training .get_spent_calories ), (
184- '`get_spent_calories` должна быть функцией .'
184+ 'Проверьте, что `get_spent_calories` - это функция .'
185185 )
186186
187187
@@ -208,7 +208,7 @@ def mock_get_spent_calories():
208208def test_Swimming ():
209209 assert hasattr (homework , 'Swimming' ), 'Создайте класс `Swimming`'
210210 assert inspect .isclass (homework .Swimming ), (
211- '`Swimming` должен быть классом .'
211+ 'Проверьте, что `Swimming` - это класс .'
212212 )
213213 assert issubclass (homework .Swimming , homework .Training ), (
214214 'Класс `Swimming` должен наследоваться от класса `Training`.'
@@ -236,15 +236,9 @@ def test_Swimming():
236236])
237237def test_Swimming_get_mean (input_data , expected ):
238238 swimming = homework .Swimming (* input_data )
239- assert hasattr (swimming , 'get_mean_speed' ), (
240- 'Создайте метод `get_mean_speed` в классе `Swimming`.'
241- )
242239 result = swimming .get_mean_speed ()
243- assert isinstance (result , float ), (
244- 'Метод `get_mean_speed` в классе `Swimming` '
245- 'должен возвращать значение типа `float`'
246- )
247240 assert result == expected , (
241+ 'Переопределите метод `get_mean_speed` в классе `Swimming`. '
248242 'Проверьте формулу подсчёта средней скорости в классе `Swimming`'
249243 )
250244
@@ -256,13 +250,9 @@ def test_Swimming_get_mean(input_data, expected):
256250])
257251def test_Swimming_get_spent_calories (input_data , expected ):
258252 swimming = homework .Swimming (* input_data )
259- assert hasattr (swimming , 'get_spent_calories' ), (
260- 'Создайте метод `get_spent_calories` в классе `Swimming`.'
261- )
262253 result = swimming .get_spent_calories ()
263- assert isinstance (result , float ), (
264- 'Метод `get_spent_calories` класса `Swimming` '
265- 'должен возвращать значение типа `float`'
254+ assert type (result ) == float , (
255+ 'Переопределите метод `get_spent_calories` в классе `Swimming`.'
266256 )
267257 assert result == expected , (
268258 'Проверьте формулу расчёта потраченных калорий в классе `Swimming`'
@@ -272,7 +262,7 @@ def test_Swimming_get_spent_calories(input_data, expected):
272262def test_SportsWalking ():
273263 assert hasattr (homework , 'SportsWalking' ), 'Создайте класс `SportsWalking`'
274264 assert inspect .isclass (homework .SportsWalking ), (
275- '`SportsWalking` должен быть классом .'
265+ 'Проверьте, что `SportsWalking` - это класс .'
276266 )
277267 assert issubclass (homework .SportsWalking , homework .Training ), (
278268 'Класс `SportsWalking` должен наследоваться от класса `Training`.'
@@ -294,13 +284,9 @@ def test_SportsWalking():
294284])
295285def test_SportsWalking_get_spent_calories (input_data , expected ):
296286 sports_walking = homework .SportsWalking (* input_data )
297- assert hasattr (sports_walking , 'get_spent_calories' ), (
298- 'Создайте метод `get_spent_calories` в классе `SportsWalking`.'
299- )
300287 result = sports_walking .get_spent_calories ()
301- assert isinstance (result , float ), (
302- 'Метод `get_spent_calories`класса `SportsWalking` '
303- 'должен возвращать значение типа`float`'
288+ assert type (result ) == float , (
289+ 'Переопределите метод `get_spent_calories` в классе `SportsWalking`.'
304290 )
305291 assert result == expected , (
306292 'Проверьте формулу подсчёта потраченных '
@@ -310,18 +296,12 @@ def test_SportsWalking_get_spent_calories(input_data, expected):
310296
311297def test_Running ():
312298 assert hasattr (homework , 'Running' ), 'Создайте класс `Running`'
313- assert inspect .isclass (homework .Running ), '`Running` должен быть классом.'
299+ assert inspect .isclass (homework .Running ), (
300+ 'Проверьте, что `Running` - это класс.'
301+ )
314302 assert issubclass (homework .Running , homework .Training ), (
315303 'Класс `Running` должен наследоваться от класса `Training`.'
316304 )
317- running = homework .Running
318- running_signature = inspect .signature (running )
319- running_signature_list = list (running_signature .parameters )
320- for param in ['action' , 'duration' , 'weight' ]:
321- assert param in running_signature_list , (
322- 'У метода `__init__` класса `Running` '
323- f'должен быть параметр { param } .'
324- )
325305
326306
327307@pytest .mark .parametrize ('input_data, expected' , [
@@ -335,9 +315,8 @@ def test_Running_get_spent_calories(input_data, expected):
335315 'Создайте метод `get_spent_calories` в классе `Running`.'
336316 )
337317 result = running .get_spent_calories ()
338- assert isinstance (result , float ), (
339- 'Метод `get_spent_calories` класса `Running` '
340- 'должен возвращать значение типа `float`'
318+ assert type (result ) == float , (
319+ 'Переопределите метод `get_spent_calories` в классе `Running`.'
341320 )
342321 assert result == expected , (
343322 'Проверьте формулу расчёта потраченных калорий в классе `Running`'
@@ -348,9 +327,9 @@ def test_main():
348327 assert hasattr (homework , 'main' ), (
349328 'Создайте главную функцию программы с именем `main`.'
350329 )
351- assert callable (homework .main ), '`main` должна быть функцией .'
330+ assert callable (homework .main ), 'Проверьте, что `main` - это функция .'
352331 assert isinstance (homework .main , types .FunctionType ), (
353- '`main` должна быть функцией .'
332+ 'Проверьте, что `main` - это функция .'
354333 )
355334
356335
0 commit comments