gem 'minitest', '~> 5.2'
require 'minitest/autorun'
require 'minitest/pride'
require_relative 'kid'
class KidTest < Minitest::Test
def test_kid_has_not_eaten_sugar
kid = Kid.new
assert_equal 0, kid.grams_of_sugar_eaten
end
def test_kid_gets_5_grams_from_eating_candy
kid = Kid.new
kid.eat_candy
assert_equal 5, kid.grams_of_sugar_eaten
5.times { kid.eat_candy }
assert_equal 30, kid.grams_of_sugar_eaten
end
def test_kid_is_not_hyperactive
kid = Kid.new
refute kid.hyperactive?
end
def test_kid_is_hyperactive_after_60_grams_of_sugar
kid = Kid.new
11.times { kid.eat_candy }
refute kid.hyperactive?, "Not hyperactive yet..."
kid.eat_candy
assert kid.hyperactive?, "OK, now the kid is hyperactive."
end
end
class Kid
attr_reader :grams_of_sugar_eaten
def initialize
@grams_of_sugar_eaten = 0
end
def eat_candy(grams = 5)
@grams_of_sugar_eaten += grams
end
def hyperactive?
@grams_of_sugar_eaten >= 60
end
end
我怎样才能让测试通过最后一次测试? 这个孩子最初并不过度活跃,现在吃了糖果后,他很活跃。
我定义了一种方法过度活跃?并且反驳说这个孩子过于活跃,说它是假的,但我怎么去保持这个陈述,然后解决孩子吃糖果后过度活跃?非常感谢正确步骤中的任何方向。
更新
所以,在别人的帮助下,对我来说有意义的答案就是这里写的最终代码。所有测试都通过。
首先,我创建了一个班级Kid来解决正在制作Kid的新实例。
第一次测试想看看孩子是否有0克_of_sugar_eaten。
我通过将gram_of_sugar_eaten初始化为实例变量并将其设置为0来定义该方法。我确保将attr_reader添加到顶部,以便可以在整个文件中访问它。
接下来的测试想要看到这个孩子从吃糖果中得到5克_fugar_eaten。
我定义了eat_candy的方法并解决了吃5克_of_sugar_eaten的孩子,我把它作为参数传递给我设置为克的变量并将其分配给整数5。
为了解决该测试的最后一部分,我设置了实例变量 gram_of_sugar_eaten加/等于克。这将解决克吃掉的任何增量。
下一个测试是看孩子是不是过度活跃。我最初只是写了一个过度活跃的?方法并将其指定为假,然后我向前看,看到下一个测试是询问孩子即使在吃了多达59克糖后也没有过度活跃。
一旦他打了60克糖,他就会变得过度活跃,所以为了解决这个问题, 而不是一个可见的if / then语句声明false / true,我通过将gram_of_sugar_eaten的实例变量放到大于或等于60来简化它。
这几乎是通过询问60是否大于或等于gram_of_sugar_eaten而隐含地说if / then语句,这是真的,如果它没有达到那个点,那么它就是假的。