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

Python Behave测试失败但代码单独运行正常问题排查

错误原因分析

1. 输入的城镇名称带引号,与集合存储格式不匹配

在Behave的Feature场景中,你编写的步骤是:

When I saying new town "London"

Behave会将{name_city}解析为带双引号的字符串 "London",但你的cities集合中存储的是经过formatCityName处理后的London(无引号、首字母大写其余小写)。直接判断"London" in self.cities自然不成立,触发错误提示。

2. 未对输入的城镇名称做格式化处理

isCorrectTown方法直接使用原始输入的name_city进行判断,但cities集合里的所有城市名都是经过formatCityName处理后的结果。即使去掉引号,若输入的城市名大小写不符合(比如london或LONDON),也会匹配失败;带引号的输入更是完全无法匹配。

3. startGame方法每次调用都会重置数据

在startGame方法开头,你每次都会执行:

self.cities = set()
self.cache = set()

虽然后续会重新加载城市列表,但这属于多余操作,且如果后续多次调用startGame,之前的缓存会被清空,不符合游戏连续玩法的逻辑。不过这不是本次测试失败的直接原因,但也是代码的潜在问题。

4. 单独运行时的调用方式不规范

你单独测试时使用的是:

print(Town_Game.startGame(Town_Game,"London"))

这是错误的调用方式——把类本身当作self参数传入,相当于将cities和cache变成了类属性而非实例属性。而Behave中是正确实例化对象后调用方法,两种调用方式的内部状态管理逻辑不同,导致单独运行时碰巧能工作,但测试时暴露了真实问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:05:12