2012-05-19 75 views
5

有没有办法从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)) 
    end 
    assert_nothing_raised do 
     Sudoku.new(Array.new(9*9,Field.new(nil))) 
    end 
    end 
end 

回答

4

测试是不是真的意味着要交互那样运行,但如果你在Ruby标准库看看,看看文件test/unit.rb你会看到,它设置了一个at_exit处理器当你require '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' 
0

,因为你没有要求它为它不运行测试。你只是创建这个类。

试试这个:

tests = SudokuTest.new 
tests.test_initialize 
+0

如果我尝试这样做,我会在调用SudokuTest.new时得到:'ArgumentError:错误的参数数量(0代表1)',我无法弄清楚它实际上需要什么作为参数。 – FlyingFoX

+0

参数应该是应该测试的方法:http://test-unit.rubyforge.org/test-unit/Test/Unit/TestCase.html#method-c-new。只需尝试'SudokuTest.new:test_initialize'。 –

+0

使用'SudokuTest.new:test_initialize'创建一个SudokuTest对象,但对其调用'test_initialize'给了我'NoMethodError:未定义的方法'add_assertion'为nil:NilClass' – FlyingFoX

0

也许plymouth是你想要的。它可以在失败的测试环境中自动启动Pry会话。