Ruby TDD Plus编码:处理布尔值

时间:2018-05-15 20:02:34

标签: ruby

TDD

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

CODE

 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语句,这是真的,如果它没有达到那个点,那么它就是假的。

0 个答案:

没有答案