Skip to content

Commit 398032c

Browse files
authored
update tests (#41)
Обновление тестов: - Убрана проверка pass в методе, теперь можно добавить кастомный класс или NotImplementedError; - При проверке расчетов все числа округляются до 3 знаков после запятой; - Атрибуты класса CALORIES_MEAN_SPEED_MULTIPLIER, CALORIES_MEAN_SPEED_SHIFT проверяются без конкретного имени переменной, только значение.
1 parent 2194a11 commit 398032c

1 file changed

Lines changed: 39 additions & 41 deletions

File tree

tests/test_homework.py

Lines changed: 39 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -106,13 +106,17 @@ def test_Training():
106106
assert inspect.isclass(homework.Training), (
107107
'`Training` должен быть классом.'
108108
)
109-
for attr, value in {'LEN_STEP': 0.65, 'M_IN_KM': 1000, 'MIN_IN_H': 60}.items():
109+
for attr, value in {
110+
'LEN_STEP': 0.65,
111+
'M_IN_KM': 1000,
112+
'MIN_IN_H': 60
113+
}.items():
110114
assert hasattr(homework.Training, attr), (
111-
f'У класса `Training` должен быть атрибут `{attr}`'
115+
f'У класса `Training` должна быть константа `{attr}`'
112116
)
113117
assert getattr(homework.Training, attr) == value, (
114-
'У класса `Training` должен быть '
115-
f'атрибут `{attr}` со значением `{value}`'
118+
'У класса `Training` должна быть '
119+
f'константа `{attr}` со значением `{value}`'
116120
)
117121
training = homework.Training
118122
training_signature = inspect.signature(training)
@@ -123,13 +127,13 @@ def test_Training():
123127
f' параметр {param}.'
124128
)
125129
assert 'LEN_STEP' in list(training.__dict__), (
126-
'Задайте атрибут `LEN_STEP` в классе `Training`'
130+
'Задайте константу `LEN_STEP` в классе `Training`'
127131
)
128132
assert training.LEN_STEP == 0.65, (
129133
'Длина шага в классе `Training` должна быть равна 0.65'
130134
)
131135
assert 'M_IN_KM' in list(training.__dict__), (
132-
'Задайте атрибут `M_IN_KM` в классе `Training`'
136+
'Задайте константу `M_IN_KM` в классе `Training`'
133137
)
134138
assert training.M_IN_KM == 1000, (
135139
'В классе `Training` укажите правильное '
@@ -191,11 +195,6 @@ def test_Training_get_spent_calories(input_data):
191195
assert callable(training.get_spent_calories), (
192196
'`get_spent_calories` должна быть функцией.'
193197
)
194-
assert training.get_spent_calories() is None, (
195-
'Метод `get_spent_calories` класса `Training` не должен '
196-
'высчитывать потреченные калории, так как для каждого типа '
197-
'тренировки своя формула подсчета калорий.'
198-
)
199198

200199

201200
def test_Training_show_training_info(monkeypatch):
@@ -226,18 +225,16 @@ def test_Swimming():
226225
assert issubclass(homework.Swimming, homework.Training), (
227226
'Класс `Swimming` должен наследоваться от класса `Training`.'
228227
)
229-
for attr, value in {
230-
'LEN_STEP': 1.38,
228+
Swimming_attr_values = homework.Swimming.__dict__.values()
229+
for _, value in {
231230
'CALORIES_MEAN_SPEED_SHIFT': 1.1,
232231
'CALORIES_WEIGHT_MULTIPLIER': 2,
233232
}.items():
234-
assert hasattr(homework.Swimming, attr), (
235-
f'У класса `Swimming` должен быть атрибут `{attr}`'
236-
)
237-
assert getattr(homework.Swimming, attr) == value, (
238-
'У класса `Swimming` должен быть '
239-
f'атрибут `{attr}` со значением `{value}`'
233+
assert value in Swimming_attr_values, (
234+
'У класса `Swimming` должна быть '
235+
f'константа со значением `{value}`'
240236
)
237+
241238
swimming = homework.Swimming
242239
swimming_signature = inspect.signature(swimming)
243240
swimming_signature_list = list(swimming_signature.parameters)
@@ -247,7 +244,7 @@ def test_Swimming():
247244
f' должен быть параметр {param}.'
248245
)
249246
assert 'LEN_STEP' in list(swimming.__dict__), (
250-
'Задайте атрибут `LEN_STEP` в классе `Swimming`'
247+
'Задайте константу `LEN_STEP` в классе `Swimming`'
251248
)
252249
assert swimming.LEN_STEP == 1.38, (
253250
'Длина гребка в классе `Swimming` должна быть равна 1.38'
@@ -270,12 +267,12 @@ def test_Swimming_get_mean(input_data, expected):
270267

271268
@pytest.mark.parametrize('input_data, expected', [
272269
([720, 1, 80, 25, 40], 336.0),
273-
([420, 4, 20, 42, 4], 182.72000000000003),
270+
([420, 4, 20, 42, 4], 182.72),
274271
([1206, 12, 6, 12, 6], 159.264),
275272
])
276273
def test_Swimming_get_spent_calories(input_data, expected):
277274
swimming = homework.Swimming(*input_data)
278-
result = swimming.get_spent_calories()
275+
result = round(swimming.get_spent_calories(), 3)
279276
assert type(result) == float, (
280277
'Переопределите метод `get_spent_calories` в классе `Swimming`.'
281278
)
@@ -299,11 +296,11 @@ def test_SportsWalking():
299296
'CM_IN_M': 100
300297
}.items():
301298
assert hasattr(homework.SportsWalking, attr), (
302-
f'У класса `SportsWalking` должен быть атрибут `{attr}`'
299+
f'У класса `SportsWalking` должна быть константа `{attr}`'
303300
)
304-
assert getattr(homework.SportsWalking, attr) == value, (
305-
'У класса `SportsWalking` должен быть '
306-
f'атрибут `{attr}` со значением `{value}`'
301+
assert round(getattr(homework.SportsWalking, attr), 3) == value, (
302+
'У класса `SportsWalking` дожна быть '
303+
f'константа `{attr}` со значением `{value}`'
307304
)
308305
sports_walking = homework.SportsWalking
309306
sports_walking_signature = inspect.signature(sports_walking)
@@ -316,13 +313,13 @@ def test_SportsWalking():
316313

317314

318315
@pytest.mark.parametrize('input_data, expected', [
319-
([9000, 1, 75, 180], 349.2517475250001),
320-
([420, 4, 20, 42], 168.11931219846002),
321-
([1206, 12, 6, 12], 151.54430943785593),
316+
([9000, 1, 75, 180], 349.252),
317+
([420, 4, 20, 42], 168.119),
318+
([1206, 12, 6, 12], 151.544),
322319
])
323320
def test_SportsWalking_get_spent_calories(input_data, expected):
324321
sports_walking = homework.SportsWalking(*input_data)
325-
result = sports_walking.get_spent_calories()
322+
result = round(sports_walking.get_spent_calories(), 3)
326323
assert type(result) == float, (
327324
'Переопределите метод `get_spent_calories` в классе `SportsWalking`.'
328325
)
@@ -338,27 +335,28 @@ def test_Running():
338335
assert issubclass(homework.Running, homework.Training), (
339336
'Класс `Running` должен наследоваться от класса `Training`.'
340337
)
341-
for attr, value in {'CALORIES_MEAN_SPEED_MULTIPLIER': 18, 'CALORIES_MEAN_SPEED_SHIFT': 1.79}.items():
342-
assert hasattr(homework.Running, attr), (
343-
f'У класса `Running` должен быть атрибут `{attr}`'
344-
)
345-
assert getattr(homework.Running, attr) == value, (
346-
'У класса `Running` должен быть '
347-
f'атрибут `{attr}` со значением `{value}`'
338+
Running_attr_values = homework.Running.__dict__.values()
339+
for _, value in {
340+
'CALORIES_MEAN_SPEED_MULTIPLIER': 18,
341+
'CALORIES_MEAN_SPEED_SHIFT': 1.79
342+
}.items():
343+
assert value in Running_attr_values, (
344+
'У класса `Running` должна быть '
345+
f'константа со значением `{value}`'
348346
)
349347

350348

351349
@pytest.mark.parametrize('input_data, expected', [
352-
([9000, 1, 75], 481.90500000000003),
353-
([420, 4, 20], 14.488800000000001),
354-
([1206, 12, 6], 12.812472),
350+
([9000, 1, 75], 481.905),
351+
([420, 4, 20], 14.489),
352+
([1206, 12, 6], 12.812),
355353
])
356354
def test_Running_get_spent_calories(input_data, expected):
357355
running = homework.Running(*input_data)
358356
assert hasattr(running, 'get_spent_calories'), (
359357
'Создайте метод `get_spent_calories` в классе `Running`.'
360358
)
361-
result = running.get_spent_calories()
359+
result = round(running.get_spent_calories(), 3)
362360
assert type(result) == float, (
363361
'Переопределите метод `get_spent_calories` в классе `Running`.'
364362
)

0 commit comments

Comments
 (0)