2010-02-02 3 views
2

У меня возникли проблемы с созданием assert_raise распознавания исключений Java.JRuby и Test :: Unit's 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) 174 номера патчей (2009-11-02 69fbfa3) (Java HotSpot (TM) Client VM 1.5.0_22) [i386-ява]

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 пропусков» –