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

使用Unittest测试我的python数字猜测游戏,python,unit-testing,Python,Unit Testing,这是我的第一篇堆栈溢出帖子,我希望能给大家留下好印象 我正在用python开发一个数字猜测游戏,用unittest让我的脚湿透了,但我遇到了一个愚蠢的难题 问题是我想创建一个unittest类来测试以下内容 预生成的数字是否与猜测的数字匹配 如果您输入字母,程序会做什么 您是否看到发生错误时创建的自定义错误(在try/except块中) 我的github项目链接在这里-> 下面是我的main.py文件 随机导入 导入系统 def guessingGame(数字、猜测):#此处放置了答案和猜测,以

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

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

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

  • 预生成的数字是否与猜测的数字匹配
  • 如果您输入字母,程序会做什么
  • 您是否看到发生错误时创建的自定义错误(在try/except块中)
  • 我的github项目链接在这里->

    下面是我的main.py文件

    随机导入
    导入系统
    def guessingGame(数字、猜测):#此处放置了答案和猜测,以便插入测试
    #它将自己的价值观融入到游戏中,但这是行不通的
    尽管如此:
    尝试:
    猜测=输入(
    f“数字猜测器。\t\t\n{name}选择一个数字”
    f“{start}和{end}。输入guess?:”)
    猜测=int(猜测)
    如果猜测<数字:
    打印(“\n\n该数字有点低\n\n”)
    elif guess>数字:
    打印(“\n\n该数字稍高\n\n”)
    其他:
    打印(“\n\n图表,您选择了正确的号码!\n\n”)
    打破
    除了(TypeError、ValueError):
    打印(“对不起,请只打印数字”)
    guess=str(f“\'{guess}\'是无效字符”)
    持续
    除了(UnboundLocalError):
    打印(“对不起,请只打印数字”)
    持续
    最后:
    打印(f“{name},您最后一次成功的猜测是{guess}”)
    如果名称=“\uuuuu main\uuuuuuuu”:
    真的
    start=int(sys.argv[1])
    end=int(sys.argv[2])
    数字=随机。随机范围(开始、结束)#选择中奖号码
    name=input(“\t\t\t\n陌生人,你叫什么名字?”)
    猜游戏
    
    我的test.py文件看起来像

    导入单元测试
    进口干管
    类TestMain(unittest.TestCase):
    def测试_输入(自身):
    真的
    数字=5
    猜测=5
    结果=main.guessingGame(数字,猜测)
    self.assertEqual(结果)
    如果名称=“\uuuuu main\uuuuuuuu”:
    unittest.main()
    
    我一直在犯错误

    回溯(最近一次呼叫最后一次):
    文件“c:\Users\Robert\desktop\Side Projects\Udemy\Master python zero to Mastery\Projects\python猜数游戏\test.py”,第10行,在test\u输入中
    结果=main.guessingGame(数字,猜测)
    文件“c:\Users\Robert\desktop\Side Projects\Udemy\Master python zero to Mastery\Projects\python number gussing game\main.py”,Gussinggame中第6行
    尽管如此:
    NameError:未定义名称“true”
    ----------------------------------------------------------------------
    在0.001s内运行1次测试
    失败(错误=1)
    [完成]在0.375秒内退出,代码=1
    

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

    更新:

    好吧,我算是解决问题了

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

    true=true
    def guessingGame(数字、猜测、名称='bob',开始=1,结束=20):
    尽管如此:
    尝试:
    #猜测=输入(
    #f“数字猜测器。\t\t\n{name}选择一个数字”
    #f“{start}和{end}。输入guess?:”)
    猜测=int(猜测)
    如果猜测<数字:
    打印(“\n\n该数字有点低\n\n”)
    elif guess>数字:
    打印(“\n\n该数字稍高\n\n”)
    
    我的test.py文件

    导入单元测试
    进口干管
    类TestMain(unittest.TestCase):
    def测试_输入(自身):
    数字=5
    猜测=5
    开始=1
    结束=20
    name=“鲍勃”
    结果=main.guessingGame(数字,猜测)
    self.assertEqual(猜测、数字)
    如果名称=“\uuuuu main\uuuuuuuu”:
    unittest.main()
    
    我需要预定义值并注释掉第一小段代码。一旦我做到了,我的考试就通过了!! 关于如何绕过这件作品,有什么想法吗?还是我的设计很糟糕?

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


    (你应该让代码
    为True:
    而不是一个变量。但是如果失败了,你需要返回false。作为一个循环可能会更好。)

    我没有仔细查看,但它看起来像你的函数
    main。猜谜游戏实际上没有返回任何东西,但是您正在测试它是否返回
    True
    。很难看出这将如何运作。此外,您的函数似乎从未使用过参数
    answer
    。谢谢,我太傻了。我改变了我的代码。我将用正确的结构进行更新。感谢您指出这一点。有了这一点,我还能够意识到,如果
    部分中的
    if\uu name\uu==“\uuu main\uu”:部分中的main.py文件下的所有内容也需要作为参数传入。所以我现在也这么做了。好吧,这并没有真正解决任何问题,回到绘图板上。请不要使用变量
    true
    来赋值
    true
    。在最好的情况下,它是冗余的,在最坏的情况下,
    true
    的值被更改为非真值。然后,
    虽然为true:
    将停止工作,您很难找出原因。