首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >反驳测试失败,即使答案正确。

反驳测试失败,即使答案正确。
EN

Stack Overflow用户
提问于 2015-04-08 06:05:49
回答 2查看 141关注 0票数 0

我正在完成来自exercism.io的Ruby练习。我目前正在研究闰年的问题。

下面是我的代码:

代码语言:javascript
复制
class Year
  DIVISORS = [4, 100, 400]

  def self.leap?(year)
    if is_year_leap?(year)
      "Yes, #{year} is a leap year"
    else
      "No, #{year} is not a leap year"
    end
  end

  def self.is_year_leap?(year)
    divisible_by = multiple_of(year)

    if !divisible_by[4]
      false
    elsif divisible_by[400]
      true
    end
  end

  def self.multiple_of(year)
    DIVISORS.each_with_object({}) do |divisor, multiple|
      multiple[divisor] = year % divisor == 0
    end
  end
end

(请注意,代码还不完整,但当我测试1997年时,它给了我正确的答案)。

测试套件如下:

代码语言:javascript
复制
require 'date'
require 'minitest/autorun'
require_relative 'leap'

class Date
  def leap?
    throw "Implement this yourself instead of using Ruby's implementation."
  end

  alias_method :gregorian_leap?, :leap?
  alias_method :julian_leap?, :leap?
end

class YearTest < Minitest::Test
  def test_leap_year
    assert Year.leap?(1996), 'Yes, 1996 is a leap year'
  end

  def test_non_leap_year
    refute Year.leap?(1997), 'No, 1997 is not a leap year'
  end

  def test_non_leap_even_year
    skip
    refute Year.leap?(1998), 'No, 1998 is not a leap year'
  end

  def test_century
    skip
    refute Year.leap?(1900), 'No, 1900 is not a leap year'
  end

  def test_fourth_century
    skip
    assert Year.leap?(2400), 'Yes, 2400 is a leap year'
  end
end

在运行我的代码时,我得到的失败是:

代码语言:javascript
复制
1) Failure:
YearTest#test_non_leap_year [leap_test.rb:20]:
No, 1997 is not a leap year

5 runs, 2 assertions, 1 failures, 0 errors, 3 skips

You have skipped tests. Run with --verbose for details.

为什么我的测试失败了?我认为它得到了正确的答案,因为1997年不是闰年,但这并不符合测试。

EN

回答 2

Stack Overflow用户

发布于 2015-04-08 06:13:29

您的leap?方法应该只返回truefalse,而不是您要返回的字符串。

这些消息('Yes,1996是一个闰年‘等)被附加到测试中,并在测试失败时显示。测试并不是要求您实际返回这些消息。

票数 1
EN

Stack Overflow用户

发布于 2015-04-08 06:15:50

leap?方法返回一个字符串,而不是一个布尔值,所以您应该用assert_equal测试它的输出:

代码语言:javascript
复制
assert_equal 'No, 1997 is not a leap year', Year.leap?(1997)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29502205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档