2012-05-19 77 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會話。