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

Unittest执行异常:显示运行0个测试用例的问题排查

问题排查与修复方案

一、测试未运行(Ran 0 tests)的修复

  • 添加测试运行入口:在测试脚本末尾补充以下代码,直接运行脚本时就能触发unittest执行测试用例:
if __name__ == '__main__':
    unittest.main()
  • 或使用命令行执行:在终端运行 python -m unittest your_test_file.py(替换成你的测试文件名),这种方式无需添加入口代码,Python会自动调用unittest的测试运行器。

二、测试用例的错误修正

你的测试用例存在两处关键问题:

  1. 错误断言:self.assertEqual(E.purchase_prompt(), True)完全不成立,purchase_prompt返回的是用户输入的金额(float类型),并非布尔值。
  2. 依赖手动输入:自动化测试不能依赖人工输入,需要通过mock模拟用户输入行为。

修正后的测试用例示例(使用unittest.mock实现输入模拟):

import unittest
from unittest.mock import patch
from Expense_Tracker import Expense

class TestCurrentBudget(unittest.TestCase):
    def test_add_expense(self):
        E = Expense()
        E.Add_Budget(2000)
        # 验证支出扣除逻辑
        self.assertEqual(E.add_expense(100), 1900)

    @patch('builtins.input', return_value='500')
    def test_purchase_prompt(self, mock_input):
        E = Expense()
        # 模拟输入500,验证返回值正确性
        self.assertEqual(E.purchase_prompt(), 500.0)
  • 将不同测试逻辑拆分到独立的test_方法中,便于问题定位,也符合单一职责原则。

三、Expense类代码的bug修复

purchase_prompt方法存在两处逻辑错误,导致无法正常验证输入:

  1. 类型判断逻辑错误:if self.new_expense == int: 是判断变量是否等于int类型,这永远为False。如果需要验证输入为整数,应使用self.new_expense.is_integer();如果只需确保输入为正数,改为if self.new_expense > 0更合理。
  2. return位置错误:return self.new_expense放在while循环内部,导致第一次循环无论输入是否有效都会直接返回,循环验证逻辑完全失效。

修正后的purchase_prompt方法:

def purchase_prompt(self):
    """Prompts user for a numerical value when adding their expense"""
    is_valid = False
    while not is_valid:
        try:
            self.new_expense = float(input("Please enter your expense($):"))
            # 验证输入为正数,可根据实际需求调整判断条件
            if self.new_expense > 0:
                is_valid = True
        except ValueError:
            # 仅捕获无法转为float的输入异常,避免捕获无关异常
            print("Wrong input! Please enter a valid number.")
    return self.new_expense

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 08:55:04