JRuby和Test :: Unit的assert_raise

时间:2010-02-02 19:52:32

标签: ruby unit-testing jruby assert testunit

我无法让assert_raise识别java异常。

我能做到

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 个答案:

答案 0 :(得分:1)

我会把它作为一个bug提出来。它似乎无法理解java类在块中引发时,因为它返回nil,因此无法通过测试。

我在jruby 1.4.0下运行(ruby 1.8.7 patchlevel 174)(2009-11-02 69fbfa3)(Java HotSpot(TM)Client 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