如何在ruby代码中放置断言

Har*_*rry 17 ruby

我想使用断言并在我的ruby代码中放置valuidations(例如:检查是否创建了zip文件,标签是否存在,文本区域中是否有消息等).我已经提出了一些断言声明assert @selenium.is_text_present(textMessage),但它们不起作用.

如果要安装断言的任何ruby gem,请告诉我.

Mar*_*off 25

对于简单的断言,你可能最好用你自己的断言方法来阻塞:

ruby-1.9.1-p378 > class AssertionError < RuntimeError
ruby-1.9.1-p378 ?>  end
 => nil 
ruby-1.9.1-p378 > def assert &block
ruby-1.9.1-p378 ?>  raise AssertionError unless yield
ruby-1.9.1-p378 ?>  end
 => nil 
ruby-1.9.1-p378 > assert { 1 > 0 }
 => nil 
ruby-1.9.1-p378 > assert { 5 == 12 }
AssertionError: AssertionError
    from (irb):8:in `assert'
    from (irb):11
    from /Users/mr/.rvm/rubies/ruby-1.9.1-p378/bin/irb:17:in `<main>'
Run Code Online (Sandbox Code Playgroud)

以copypastastable形式:

class AssertionError < RuntimeError
end

def assert &block
    raise AssertionError unless yield
end

i = 1
assert {i >= 0}
assert { 5 == 12 }
Run Code Online (Sandbox Code Playgroud)

  • 如果 assert 方法在执行“raise...unless yield”之前检查了一些其他条件(例如 'if DEBUG_ENABLED'),那么如果该条件返回 false,则永远不会调用 yield,因此传入块永远不会被评估。如果块所做的事情很昂贵,这可能会对程序执行时间产生很大影响。 (3认同)
  • 是否有理由使用块作为参数而不是简单的布尔值? (2认同)