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

Python unittest单元测试代码校验及运行逻辑咨询

单元测试代码审核结果

你写的测试代码不符合unittest使用规范,也没有覆盖业务函数的校验逻辑,无法完成测试目的,具体问题如下:

核心问题梳理

  • 结构错误:test_validateMachineName 方法没有缩进在 TestValidateF 类内部,unittest 运行时不会识别为测试用例
  • 变量/函数名错误:测试方法内使用了不存在的变量 machineName、不存在的函数 ValideIPAdd,运行直接报错
  • 断言用法错误:assertRaises 第一个参数要求是预期抛出的异常类型,第二个是待测试的函数,你直接传字符串作为参数,完全不符合语法要求
  • 测试逻辑缺失:仅写死了一个合法值作为测试输入,既没有覆盖空输入、非法输入等分支场景,也没有对应业务逻辑做断言校验,完全达不到测试效果
  • 冗余判断多余:业务函数本身已经做了参数校验,测试用例不需要额外判断变量类型,直接调用函数做断言即可

业务函数逻辑先明确

写测试之前首先要理清待测试函数的预期行为:

  1. validateName 预期行为:
    • 入参为空时返回 True
    • 入参非空时,要求小写字母开头,后续仅允许小写字母、数字、横杠,不符合规则返回 False,符合返回 True
      注意:原业务函数的正则写了两个$,属于笔误,会导致匹配错误,建议改成一个$
  2. validateIp 预期行为:
    • 入参是合法IP(IPv4/IPv6都算)时无返回,入参是非法IP时抛出 ValueError

正确的测试代码示例

import unittest
import re
import ipaddress

# 先引入你的业务函数,这里直接写出来方便运行
def validateName(machineName):
    if machineName:
        pattern = "^[a-z][a-z\d-]+$" # 修正了原正则两个$的错误
        if not re.match(pattern,machineName):
           return False 
    return True

def validateIp(inputIp):
    try:
        ipaddress.ip_address(inputIp)
    except ValueError as err:
        raise(err)  

class TestValidateF(unittest.TestCase):
    # 测试validateName的所有场景
    def test_validateName_empty_input(self):
        # 测试空输入场景
        self.assertTrue(validateName(""))
        self.assertTrue(validateName(None))

    def test_validateName_valid_input(self):
        # 测试合法名称场景
        self.assertTrue(validateName("abc123"))
        self.assertTrue(validateName("a-b-c-123"))
        self.assertTrue(validateName("a12-3bc"))

    def test_validateName_invalid_input(self):
        # 测试非法名称场景
        self.assertFalse(validateName("123abc")) # 数字开头
        self.assertFalse(validateName("Abc123")) # 大写字母开头
        self.assertFalse(validateName("abc_123")) # 包含下划线
        self.assertFalse(validateName("a")) # 长度只有1,正则要求至少两个字符(开头1个+后续至少1个)

    # 测试validateIp的所有场景
    def test_validateIp_valid_ipv4(self):
        # 合法IPv4无异常
        validateIp("10.75.10.98")
        validateIp("255.255.255.255")

    def test_validateIp_valid_ipv6(self):
        # 合法IPv6无异常
        validateIp("2001:db8::1")

    def test_validateIp_invalid_input(self):
        # 非法IP抛出ValueError
        with self.assertRaises(ValueError):
            validateIp("256.0.0.1")
        with self.assertRaises(ValueError):
            validateIp("10.75.10.999")
        with self.assertRaises(ValueError):
            validateIp("invalid_ip")

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

单元测试通用实现要求

  • 场景全覆盖:要覆盖待测试函数的所有分支,包括合法输入、非法输入、边界输入、空输入等所有可能的情况
  • 单场景单测:每个测试方法只测一个场景,命名要清晰说明测试的内容,方便后续排查问题
  • 正确使用断言:不要自己写if判断抛出错误,直接用unittest提供的assertTrue、assertFalse、assertRaises等断言方法
  • 测试用例独立:每个测试用例可以独立运行,不依赖其他用例的执行结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:24:03