Ruby没有引发正确的异常

时间:2012-02-09 20:17:06

标签: ruby unit-testing rspec tdd

当我的一个变量大于13或小于1时,我试图引发2个异常 如果的类型不是已定义的类型,我也想提出异常。 这是我的代码:

require "../lib/suit"
class Card
    attr_reader :suit,:number
 def initialize(suit,number)
     raise "CardNumberNotValid" if 1>number>13
     raise "SuitNotValid" if suit!=Suit::CLUB or suit!=Suit::HEART or suit!=Suit::DIAMOND or suit!=Suit::SPADE
     @suit=suit
     @number=number
 end
end

这是我的测试:

require "rspec"
require "../lib/suit"
require "../lib/card"

describe Card do

  it "should check if card number is between 1 and 13" do
    expect{Card.new(Suit::CLUB,14)}.to raise_error("CardNumberNotValid")
  end
end

结果如下:

  

故障:

     

1)卡片应检查卡号是否在1到13之间        失败/错误:期待{Card.new(Suit :: CLUB,14)}。to raise_error(“CardNumberNotValid”)          预期的“CardNumberNotValid”异常,得到错误的'':FalseClass>        #。/ card_spec.rb:8

     

以0.00064秒结束1例,1例失败

     

失败的例子:

     

rspec ./card_spec.rb:7#卡应检查卡号是否介于1之间   和13

你可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

1>number>13

在Ruby中不起作用。使用类似的东西:

number.between?(1, 13)

答案 1 :(得分:0)

如果你在没有类型的ruby中引发错误:

raise "My pink pig"

ruby​​将使用“My pink pig”作为消息引发RuntimeError(假设您尚未处理错误,在这种情况下,新错误将具有相同的类型)。

您可能应该以不同的方式预期错误:

expect{Card.new(Suit::CLUB,14)}.to raise_error(RuntimeError, "CardNumberNotValid")