Как я могу заглушить вызов super в импортированном классе Java в JRuby для тестирования - PullRequest
0 голосов
/ 27 февраля 2010

Я тестирую классы Java с помощью RSpec и 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, надеясь, что он сначала попадет в метод модуля, но B все еще вызывает метод A. Метод вставки модуля работает в Ruby, но не с JRuby и импортированными классами Java. .

Какие-нибудь другие идеи о том, чтобы заглушить метод суперкласса для прохождения моего теста RSpec?

1 Ответ

1 голос
/ 27 февраля 2010

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

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

...