Python unittest测试Car类时test_details等两测试用例报错求助
单元测试失败问题定位与修复
test_details 用例失败根因
你的get_details方法仅通过print()在控制台输出详情字符串,没有将拼接完成的详情字符串作为返回值传出。
- 测试用例的校验逻辑是将
self.car1.get_details()的返回值和预期的详情字符串做等值比对 - 当前方法执行后无显式返回值,调用后实际得到的结果是
None,和预期的字符串完全不匹配,直接触发断言失败
test_price_reduction 用例失败根因
你的reduce_price方法的价格修改逻辑存在本质错误:
- 现有代码写法为
self._price = self._cost - reduction,把降价的计算基数错换成了车辆采购成本,而非车辆当前的挂牌售价 - 你单独运行car.py时输出符合预期,是因为手动测试实例的参数刚好凑出了打印结果,和unittest中传入的Car实例参数并不匹配:unittest中car1的成本为4999.99,按现有错误逻辑扣减1000.5后得到的新售价为3999.49,最终计算的利润为负数,完全达不到测试预期的3999.5的利润值
对应修复代码
- 修正
get_details方法,将拼接好的详情字符串通过return返回,修改后实现:
def get_details(self): """ Returns the formatted car detail string """ return f"{self._year} {self._make} {self._model} for sale for ${self._price}"
- 修正
reduce_price方法的赋值逻辑,基于当前挂牌售价扣减降价额度,修改后实现:
def reduce_price(self, reduction): """ Updates the listed price by subtracting the passed reduction amount """ self._price = self._price - reduction
优化建议:car.py文件顶层直接编写的手动测试逻辑,建议移入
if __name__ == '__main__'判断块内,避免被unittest导入模块时自动执行产生冗余控制台输出,干扰测试结果判断。
内容的提问来源于stack exchange,提问作者Hudson
相关产品推荐
相关产品推荐

