Ruby 从irb或pry运行单元测试

Ruby 从irb或pry运行单元测试,ruby,testing,irb,pry,Ruby,Testing,Irb,Pry,有没有办法从irb或pry会话内部运行测试文件 我尝试了load./testfile.rb,但是没有运行testfile中的测试 我的测试文件如下所示: require 'test/unit' require './sudoku.rb' class SudokuTest < Test::Unit::TestCase def test_initialize assert_nothing_raised do Sudoku.new(Array.new(9*9))

有没有办法从irb或pry会话内部运行测试文件

我尝试了
load./testfile.rb
,但是没有运行testfile中的测试

我的测试文件如下所示:

require 'test/unit'
require './sudoku.rb'

class SudokuTest < Test::Unit::TestCase
  def test_initialize
    assert_nothing_raised do
      Sudoku.new(Array.new(9*9))
    end
    assert_nothing_raised do
      Sudoku.new(Array.new(9*9,Field.new(nil)))
    end
  end
end
要求“测试/单元”
需要“./sudoku.rb”
类SudokuTest
它不会运行测试,因为您没有要求它运行测试。您只是在创建类

试试这个:

tests = SudokuTest.new
tests.test_initialize

测试实际上并不意味着要像那样以交互方式运行,但是如果您查看ruby标准库并查看文件
test/unit.rb
,您将看到当您
需要“test/unit”
时,它会在退出时设置一个
处理程序:

at_exit do
  unless $! || Test::Unit.run?
    Kernel.exit Test::Unit::AutoRunner.run
  end
end
因此,在
irb
会话中,您需要做的就是调用:

Test::Unit::AutoRunner.run
这将运行从
Test::Unit::TestCase
子类加载的所有测试

如果您只想运行测试文件,而不想将其加载到
irb
会话中,您只需执行以下操作:

system 'ruby testfile.rb'

也许这就是你想要的。它可以在测试失败的情况下自动启动Pry会话。

如果我尝试此操作,我会得到:
ArgumentError:调用SudokuTest.new时参数数量错误(0代表1)
,并且我无法确定它实际想要什么作为参数。参数应该是应该测试的方法:。尝试简单地
SudokuTest.new:test\u initialize
。使用
SudokuTest.new:test\u initialize
创建一个SudokuTest对象,但对其调用
test\u initialize
会给我
NoMethodError:nil:NilClass的未定义方法“add\u断言”