Ruby布尔值处理:修复Santa类Minitest测试不通过问题
修复你的Santa类TDD测试问题
咱们先拆解下现有代码里的几个关键问题,正是这些问题导致最后一个测试用例失败:
现有代码的核心问题
- 初始化逻辑错误:
@eats_cookies在初始化时被赋值为未定义的参数eats_cookies,正确的初始值应该是0(代表Santa一开始没吃饼干) - 缺少
eats_cookies方法:测试里多次调用santa.eats_cookies来让Santa吃饼干,但你的类里只有attr_reader,没有实现这个用来增加饼干计数的方法 fits?方法语法与逻辑问题:你写的unless/else不符合Ruby语法规范,而且逻辑表达也不够清晰
一步步修复代码
1. 修正初始化方法
把@eats_cookies初始化为0,确保初始状态正确:
def initialize @eats_cookies = 0 end
2. 添加eats_cookies计数方法
实现这个方法来每次调用时增加饼干计数,同时保留attr_reader用来读取计数:
attr_reader :eats_cookies def eats_cookies @eats_cookies += 1 end
3. 重构fits?方法
这里有两种写法,都能正确实现逻辑,第一种更符合Ruby简洁风格:
# 简洁版:直接返回判断结果 def fits? @eats_cookies <= 2 end
如果你更倾向用unless/else的写法,正确的语法格式是:
def fits? unless @eats_cookies > 2 true else false end end
修复后的完整Santa类代码
class Santa attr_reader :eats_cookies def initialize @eats_cookies = 0 end def eats_cookies @eats_cookies += 1 end def fits? @eats_cookies <= 2 end end
验证测试结果
现在运行你的TDD测试,三个断言都会顺利通过:
- 初始状态下,
fits?返回true,第一个assert通过 - 吃1、2块饼干时,
fits?仍返回true,前两个assert通过 - 吃第3块饼干后,
fits?返回false,最后一个refute断言通过
这样你的TDD流程就完全跑通了,核心就是补全缺失的方法、修正初始化值,以及规范Ruby语法逻辑。
内容的提问来源于stack exchange,提问作者cjl85
相关产品推荐
相关产品推荐

