Я новичок в программировании и много раз искал ответы на вопросы, но не смог найти ответ на мою текущую проблему.
Я пишу небольшую игру в python 3.8 и использую pytest для выполнить некоторые базовые тесты c. Один из моих тестов касается функции, использующей random.randint()
Вот выдержка из моего кода:
import random
...
def hit(self, enemy, attack):
dmg = random.randint(self.weapon.damage_min, self.weapon.damage_max) + self.strength // 4
hit()
выполняет другие действия после этого, но проблема с этой первой строкой .
Я пытался использовать monkeypatching, чтобы получить поддельное случайное число для теста:
def test_player_hit_missed(monkeypatch, monster, hero):
monkeypatch.setattr('random.randint', -3)
hero.hit(monster, 'Scream')
assert monster.life == 55
Когда я запускаю тест, я получаю эту ошибку:
TypeError: 'int' object is not callable
Из того, что я понимаю, обезьян-патч заменил randint()
на номер, который я указал (-3), но затем моя функция hit()
все же попыталась вызвать его. Я думал, что -3 заменит randint()
результат.
Может кто-нибудь объяснить мне: - почему это не работает (возможно, я не правильно понял поведение обезьяньего патча)? - и как я могу заменить вызов random.randint () на значение -3 во время теста?
Спасибо