根据 TDD 在回文上进行单元测试

问题描述 投票:0回答:1

我是 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

python tdd
1个回答
0
投票

嗯,该代码显然不是用 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 命名约定。这将使您的代码更容易理解。

© www.soinside.com 2019 - 2024. All rights reserved.