Как заменить вызов random.randint () в функции, протестированной с pytest? - PullRequest
0 голосов
/ 05 апреля 2020

Я новичок в программировании и много раз искал ответы на вопросы, но не смог найти ответ на мою текущую проблему.

Я пишу небольшую игру в 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 во время теста?

Спасибо

...