为什么'undefined方法`assert_equal''在被要求'test/unit'之后被抛出

TDH*_*DHM 8 ruby testunit

我打开irb并输入:

require 'test/unit'
Run Code Online (Sandbox Code Playgroud)

但是当我使用这个assert_equal方法时,我得到了以下错误:NoMethodError: undefined method 'assert_equal' for main:Object.为什么即使在要求'测试/单位'之后也会发生这种情况?

Lee*_*ley 11

assert_equal是在子类上定义的Test::Unit::TestCase,因此仅在该类中可用.include Test::Unit::TestCase将这些方法加载到当前作用域可能会取得一些成功.

更有可能你可以更好地在短文件中编写测试,然后运行它们 ruby ./my_file.rb


小智 8

您可以在内置的ruby错误测试中使用

raise "Message you want to throw when error happens" if/unless "Condition when you want to throw the error "
Run Code Online (Sandbox Code Playgroud)

要么

如果在尝试使用断言时收到错误消息,例如"对于main:Object"的"NoMethodError:undefined method`assert",则将其添加到脚本的顶部:

require "test/unit/assertions"
include Test::Unit::Assertions
Run Code Online (Sandbox Code Playgroud)


Bor*_*cky 6

这是断言的使用方式:

class Gum
  def crisis; -42 end
end

# and as for testing:

require 'test/unit'

class GumTest < Test::Unit::TestCase
  def test_crisis
    g = Gum.new
    assert_equal -42, g.crisis
  end
end
Run Code Online (Sandbox Code Playgroud)