我是 QA 的学生,现在我尝试基于 TDD 和单元测试用 Python 编写回文代码。
我尝试编写代码,它可以正常工作,但根据
assertTrue
,它不起作用,我也检查了assertEqual
。
Python代码:
def PalindromTest(string):
return string == string[::-1]
while True:
stringul = input ("Enter a string or number:\n")
string = stringul.replace(" ", "").lower()
Test = PalindromTest(string)
if Test == True:
print (f'"{stringul} value is a palindrom"')
else:
print (f'"{stringul} value is not a palindrom"')
测试:
import unittest;
from Asignment_TDD import PalindromTest;
class MyPalindrome (unittest.TestCase):
def test_palindrome (self):
self.assertTrue (PalindromTest("civic"), "civic")
if __name__=='__main__':
unittest.main()
请帮我编写正确版本的Unittest
嗯,该代码显然不是用 TDD 风格编写的:-)
单元测试需要自动化,因此测试和被测代码都不应要求输入。 (如果被测试的代码表现不佳并且您无法阻止它询问,请尝试自动为其提供输入。但这可能还太先进了。)
这样,我将删除要求输入的
while True:
循环,或者将其移到其他地方,或者使用 if __name__=='__main__':
检查来保护它,就像在测试用例中一样。这样它就不会仅仅因为其他程序import
是正在测试的代码而运行。您可能应该始终拥有该 if __name__=='__main__':
,除非您编写的脚本不会在其他地方重用。一旦你这样做了,你的测试就会运行并通过。现在,我要为不是回文的文本添加另一个测试,并断言代码正确返回 False
。
def PalindromTest(string):
return string == string[::-1]
if __name__=='__main__':
while True:
stringul = input ("Enter a string or number:\n")
string = stringul.replace(" ", "").lower()
Test = PalindromTest(string)
if Test == True:
print (f'"{stringul} value is a palindrom"')
else:
print (f'"
跑步:
$ python3 test.py
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
说到我会做什么:我还会坚持Python 命名约定。这将使您的代码更容易理解。