0

我正在使用 RSpec 和 JRuby 测试 Java 类。

在我的 RSpec 测试中,如何在导入的 Java 类中存根对 super 的调用?

例如:

我有 2 个 Java 类:

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

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

我只是想用 JRuby 测试 B.foo 中的代码,而不是 A.foo 中的代码。如何在我的 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

我曾尝试在 B 的类中包含一个带有新 foo 方法的模块,希望它会首先命中模块方法,但 B 仍然调用 A。插入模块技术在 Ruby 中有效,但不适用于 JRuby 和导入的 Java 类。

有什么其他想法可以消除超类方法以使我的 RSpec 测试通过?

4

1 回答 1

1

I don't think you can, and it seems illogical. The foo() method invocation of super.foo() is part of it's implementation - in principle, it might be necessary for it's correct behavior.

Perhaps the functionality you want to test separately needs to be separated into a separate method and called from foo() and by your testing?

于 2010-02-27T19:29:25.460 回答