2010-02-27 6 views
0

Я тестирую классы Java с RSpec и JRuby.Как я могу отключить вызов супер в импортированном классе Java в JRuby для тестирования

Как я могу отключить вызов super в импортированном классе Java в моем тесте RSpec?

Например:

У меня есть 2 Java-классы:

public class A{ 
    public String foo() { 
    return "bar"; 
    } 
} 

public class B extends A 
    public String foo() { 
    // B code 
    return super.foo(); 
    } 
} 

Я просто пытаюсь проверить код в B.foo и не код в A.foo с JRuby. Как я могу отключить вызов метода суперкласса в моем тесте RSpec?

RSpec тест:

java_import Java::B 

describe B do 
    it "should not call A.foo" do 
    # some code to stub out A.foo 
    b = B.new 
    b.foo.should_not == "bar" 
    end 
end 

Я попытался включая модуль с новым методом Foo в классе Б, надеясь, что она попала в модульный метод первый, но B по-прежнему делает вызов А. технике модуль вставки работает в Ruby, но не с JRuby и импортированными Java-классами.

Любые другие идеи, чтобы заглушить метод суперкласса, чтобы пройти тест RSpec?

ответ

1

Я не думаю, что вы можете, и это кажется нелогичным. Вызов метода foo() метода super.foo() является частью его реализации - в принципе, это может быть необходимо для правильного поведения.

Возможно, функциональность, которую вы хотите протестировать отдельно, должна быть разделена на отдельный метод и вызвана из foo() и вашим тестированием?

+0

Я согласен, что рефакторинг для тестирования может быть самым простым решением. Иногда реорганизация сложнее, особенно если я использую библиотеку поставщика. Я надеюсь, что я все еще могу сделать это в JRuby, поскольку это вариант в Ruby. Приятно иметь еще один инструмент для тестирования. –