You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

QA学生求助:修正基于TDD的Python回文unittest测试用例

问题分析与修正方案

核心问题

  1. assertTrue的第二个参数是错误提示文本,并非测试用例标识,你的写法语法没问题,但测试场景覆盖不全。
  2. 原业务代码中,字符串的空格移除、大小写转换逻辑放在了交互循环里,而非回文判断函数中,导致测试时直接传入带空格/大小写的字符串会得到错误结果。
  3. 测试用例仅覆盖了单一正向场景,缺少反向用例和边界情况(如空字符串、带特殊格式的回文)。

优化后的业务代码(Asignment_TDD.py)

把字符串预处理逻辑抽成独立函数,让回文判断函数职责更清晰,也方便测试:

def clean_input_string(string):
    return string.replace(" ", "").lower()

def PalindromTest(string):
    cleaned_str = clean_input_string(string)
    return cleaned_str == cleaned_str[::-1]

# 交互逻辑保留
while True:
    user_input = input("Enter a string or number:\n")
    if PalindromTest(user_input):
        print(f'"{user_input}" is a palindrome')
    else:
        print(f'"{user_input}" is not a palindrome')

修正后的测试代码

import unittest
from Asignment_TDD import PalindromTest, clean_input_string

class PalindromeTestCase(unittest.TestCase):
    def test_string_cleaning(self):
        # 单独测试字符串预处理逻辑
        self.assertEqual(clean_input_string("A Man"), "aman")
        self.assertEqual(clean_input_string("Hello World 123"), "helloworld123")
        self.assertEqual(clean_input_string(""), "")

    def test_valid_palindromes(self):
        # 测试正向回文场景
        self.assertTrue(PalindromTest("civic"), "Expected 'civic' to be a palindrome")
        self.assertTrue(PalindromTest("A man a plan a canal Panama"), "Expected Panama phrase to be a palindrome")
        self.assertTrue(PalindromTest("12321"), "Expected '12321' to be a palindrome")
        self.assertTrue(PalindromTest(""), "Expected empty string to be a palindrome")

    def test_invalid_palindromes(self):
        # 测试非回文场景
        self.assertFalse(PalindromTest("hello"), "Expected 'hello' not to be a palindrome")
        self.assertFalse(PalindromTest("12345"), "Expected '12345' not to be a palindrome")
        self.assertFalse(PalindromTest("Python"), "Expected 'Python' not to be a palindrome")

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

关键说明

  • 抽离clean_input_string函数:将字符串预处理逻辑独立,既符合单一职责原则,也能单独验证预处理是否正确。
  • 丰富测试场景:覆盖了大小写混合、带空格、数字、空字符串等多种情况,同时包含正向和反向测试,确保函数逻辑全面可靠。
  • 规范断言使用:assertTrue/assertFalse的第二个参数作为错误提示,能在断言失败时快速定位问题。

内容的提问来源于stack exchange,提问作者SPGA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 17:52:44