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