Форум сайта python.su
0
Имеется класс Employee с атрибутами имя, фамилия и зарплата. К нему прилагается метод, увеличивающий зарплату на 5000 по умолчанию. Так вот необходимо протестировать метод, когда зарплата повышается по умолчанию и когда повышается на другую величину. Проверил код класса - все работает, но вот когда тест, то код проваливается. Выдает ошибку.
ERROR: test_give_default_raise (__main__.TestEmployee)
———————————————————————-
Traceback (most recent call last):
File “D
Piton/isayka.py”, line 12, in test_give_default_raise
self.rabotnik.give_raise(self)
File “D
Piton\profile.py”, line 11, in give_raise
self.salary+=increase
TypeError: unsupported operand type(s) for +=: ‘int’ and ‘TestEmployee’
———————————————————————-
Ran 1 test in 0.047s
FAILED (errors=1)
import unittest from profile import Employee class TestEmployee(unittest.TestCase): def setUp(self): first_name='Alexander' last_name='Isaev' self.salary=100 self.rabotnik=Employee(first_name, last_name, self.salary) def test_give_default_raise(self): self.rabotnik.give_raise(self) self.assertEqual(5100, str(self.rabotnik.salary)) unittest.main()
Отредактировано Murmakil (Июль 5, 2018 21:15:54)
Офлайн
0
Знаки табуляции удалились сами при опубликовании вопроса!
Офлайн
61
Murmakil
Знаки табуляции удалились сами при опубликовании вопроса!
Офлайн
294
наскидку
в
self.salary+=increase
одна переменная имеет тип int а вторая TestEmployee
о чем вам честно сообщает интерпретатор:
self.salary+=increase
TypeError: unsupported operand type(s) for +=: ‘int’ and ‘TestEmployee’
что у вас в self.rabotnik.give_raise()? и накой ляд вы туда self передаете если судя по названию нужно указывать величину ЗП
Ну и да оформите код в теги
[code python][/code]
[code python][/code]
Офлайн
0
PEHDOMвот метод give_raise
наскидкув self.salary+=increaseодна переменная имеет тип int а вторая TestEmployeeо чем вам честно сообщает интерпретатор:self.salary+=increaseTypeError: unsupported operand type(s) for +=: ‘int’ and ‘TestEmployee’ что у вас в self.rabotnik.give_raise()? и накой ляд вы туда self передаете если судя по названию нужно указывать величину ЗП Ну и да оформите код в теги
def give_raise(self, increase=5000): self.increase=increase self.salary+=increase return self.salary
Офлайн
294
Murmakilну и накой вы туда передаете ссылку на инстанс класса TestEmployee, когда нужно передать значение увеличения ЗП, или ничего не передавать если нужно подня на дефолтное значение?
вот метод give_raise
[code python][/code]
Офлайн
0
PEHDOMсработало. Правда еще пришлось удалить преобразование в строку.

Офлайн
294
Murmakilвообще он передается всегда автоматически(кроме случае когда это медод класса или статический метод) если вызывается по типу инстанс.метод() и его не нужно самому передавать.
Я думал, при работе с классами self всегда передается.
[code python][/code]
Отредактировано PEHDOM (Июль 6, 2018 14:43:55)
Офлайн
0
PEHDOMтак в данном случае метод give_raise относится к классу.
Офлайн
294
Murmakilну так и ссылку на инстанс класса интерпретатор сам подставит, не нужно ее самому передавать.
так в данном случае метод give_raise относится к классу.
[code python][/code]
Офлайн