2010-02-02 60 views
2

我在製作assert_raise時遇到了麻煩,可以識別java異常。JRuby和Test ::單元的assert_raise

我可以做

assert_raise(NativeException) { @iter.next } 

,工作正常,但如果我試圖獲得更具體的

java_import 'java.util.NoSuchElementException' 
#... 
assert_raise(NoSuchElementException) { @iter.next } 

我得到的錯誤

Should expect a class of exception, Java::JavaUtil::NoSuchElementException. 
<nil> is not true. 

不過,我可以用begin/rescue/end發現異常:

assert(begin 
     @iter.next 
     false 
     rescue NoSuchElementException 
     true 
     end) 

有什麼我做錯了,或者這是Test::Unit的一部分失敗?

回答

1

我會提高它作爲一個錯誤。它看起來無法理解Java類在塊中引發時的情況,因爲它返回nil,因此無法通過測試。

我跑它的jruby下1.4.0(紅寶石1.8.7 PATCHLEVEL 174)(2009-11-02 69fbfa3)(爪哇的HotSpot(TM)客戶機VM 1.5.0_22)[I386-java的]

include Java 
import java.util.NoSuchElementException 
require 'test/unit' 

class FooBar < Test::Unit::TestCase 
    def test_foo 
    exception_caught = false 
    begin 
     raise NoSuchElementException.new("Bad param") 
    rescue NoSuchElementException => e 
    exception_caught = true 
    end 
    assert exception_caught 
end 

    def test_bar 
    assert_raise NoSuchElementException do 
     raise NoSuchElementException.new("Bad param") 
    end 
    end 
end 
+1

JRuby 1.7.3與openjdk-7:「2個測試,2個斷言,0個失敗,0個錯誤,0個跳過」 – 2013-03-20 20:32:14