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

Python单元测试报错求助:Form类测试代码无法正常运行

代码错误排查与修复

业务代码问题及修复

存在的错误

  • 调用未定义函数:最后一行print(form_url("https://itproger.com"))中的form_url从未声明,运行时会抛出NameError。
  • 链接参数冗余:form2的link参数重复了https://前缀,属于逻辑瑕疵,不影响运行但不符合规范。

修复后的业务代码

class Form:
    def __init__(self, name, pas, email='', link=''):
        self.name = name
        self.pas = pas
        self.email = email
        self.link = link

form = Form("Mam", "testpas")
form2 = Form("Dad", "testpas2", "ex@gma.co", "https://stackoverflow.com/")
# 若需要form_url功能,先定义函数
def form_url(url):
    return f"处理后的URL: {url}"
print(form_url("https://itproger.com"))

单元测试代码问题及修复

存在的错误

  • 实例化类时缺省必填参数:Form的构造方法要求至少传入name和pas,setUp里直接调用form.Form()会抛出TypeError。
  • 测试逻辑矛盾:同一个实例不可能同时拥有name="Mam"和name="Dad",断言会全部失败。
  • 测试用例未区分实例:应该针对两个不同的Form对象分别验证属性。

修复后的单元测试代码

import unittest
import form

class TestForm(unittest.TestCase):
    def setUp(self):
        # 创建两个测试实例
        self.form1 = form.Form("Mam", "testpas")
        self.form2 = form.Form("Dad", "testpas2", "ex@gma.co", "https://stackoverflow.com/")

    def test_form1_init(self):
        self.assertEqual(self.form1.name, "Mam")
        self.assertEqual(self.form1.pas, "testpas")
        self.assertEqual(self.form1.email, "")  # 验证默认空值
        self.assertEqual(self.form1.link, "")   # 验证默认空值

    def test_form2_init(self):
        self.assertEqual(self.form2.name, "Dad")
        self.assertEqual(self.form2.pas, "testpas2")
        self.assertEqual(self.form2.email, "ex@gma.co")
        self.assertEqual(self.form2.link, "https://stackoverflow.com/")

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

内容的提问来源于stack exchange,提问作者Everyone make mistakes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:56:07