使用Unittest测试我的python数字猜测游戏

2024-03-28 17:24:54 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的第一篇堆栈溢出帖子,我希望能给大家留下好印象

我正在用python开发一个数字猜测游戏,用unittest让我的脚湿透了,但我遇到了一个愚蠢的难题

问题是我想创建一个unittest类来测试以下内容

  1. 预生成的数字是否与猜测的数字匹配
  2. 如果您输入字母,程序会做什么
  3. 您是否看到发生错误时创建的自定义错误(在try/except块中)

我的github项目链接在这里->https://github.com/robpedersendev/python-number-guessing-game

下面是我的main.py文件

import random
import sys


def guessingGame(number, guess):  # Answer and guess was placed here so as to allow the test to insert 
                                  # its own values into the game, but that is not working
    while true:

        try:
            guess = input(
                f"Number guesser.\t\t\n {name} choose a number between "
                f"{start} and {end}. Enter guess? : ")
            guess = int(guess)
            if guess < number:
                print("\n\nThat number is a tad low\n\n")
            elif guess > number:
                print("\n\nThat number is a tad high\n\n")
            else:
                print("\n\nCongrats, you chose the right number!\n\n")
                break

        except (TypeError, ValueError):
            print("Sorry, numbers only please")
            guess = str(f"\'{guess}\' Which is an invalid character")
            continue
        except (UnboundLocalError):
            print("Sorry, numbers only please")
            continue
        finally:
            print(f"{name}, your last successful guess was {guess}")


if __name__ == "__main__":
    true = True
    start = int(sys.argv[1])
    end = int(sys.argv[2])
    number = random.randrange(start, end)  # Selects the winning number
    name = input("\t\t\t\t\nHello stranger, whats your name? ")
    guessingGame()

我的test.py文件看起来像

import unittest
import main


class TestMain(unittest.TestCase):
    def test_input(self):
        true = True
        number = 5
        guess = 5
        result = main.guessingGame(number, guess)
        self.assertEqual(result)


if __name__ == "__main__":
    unittest.main()

我一直在犯错误

Traceback (most recent call last):
  File "c:\Users\Robert\desktop\Side Projects\Udemy\Master python zero to Mastery\projects\python-number-guessing-game\test.py", line 10, in test_input
    result = main.guessingGame(number, guess)
  File "c:\Users\Robert\desktop\Side Projects\Udemy\Master python zero to Mastery\projects\python-number-guessing-game\main.py", line 6, in guessingGame
    while true:
NameError: name 'true' is not defined

----------------------------------------------------------------------
Ran 1 test in 0.001s

FAILED (errors=1)

[Done] exited with code=1 in 0.375 seconds

Error message

我知道我有很多事情要做,也有很多东西要学,但我希望能得到一些有益的指导

更新:

好吧,我算是解决问题了

问题在我的main.py文件中我需要这个

true = True


def guessingGame(number, guess, name='bob', start=1, end=20):
    while true:

        try:
            # guess = input(
            #     f"Number guesser.\t\t\n {name} choose a number between "
            #     f"{start} and {end}. Enter guess? : ")
            guess = int(guess)
            if guess < number:
                print("\n\nThat number is a tad low\n\n")
            elif guess > number:
                print("\n\nThat number is a tad high\n\n")

我的test.py文件

import unittest
import main


class TestMain(unittest.TestCase):
    def test_input(self):
        number = 5
        guess = 5
        start = 1
        end = 20
        name = "bob"
        result = main.guessingGame(number, guess)
        self.assertEqual(guess, number)


if __name__ == "__main__":
    unittest.main()

我需要预定义值并注释掉第一小段代码。一旦我做到了,我的考试就通过了!! 有什么想法,关于如何绕过这件作品,还是我的设计很糟糕


Tags: namepytestimporttruenumberinputis
1条回答
网友
1楼 · 发布于 2024-03-28 17:24:54

https://book.crawfordc.com/anatomy-of-a-modern-test-file

这是我不久前写的一篇关于使用假设和pytest编写单元测试的文章。 为了测试输入字母时出现的错误,可以使用with pytest.raises模式。 使用假设生成随机数也会比生成随机数更好

(您应该只使代码while True:而不是变量。但如果失败,则需要返回false。作为循环可能更好。)

相关问题 更多 >