如何在JRuby中导入的Java类中取消对super的调用以进行测试

如何在JRuby中导入的Java类中取消对super的调用以进行测试,java,testing,jruby,stub,super,Java,Testing,Jruby,Stub,Super,我正在用RSpec和JRuby测试Java类 在RSpec测试中,如何在导入的Java类中取消对super的调用 例如: 我有两个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中

我正在用RSpec和JRuby测试Java类

在RSpec测试中,如何在导入的Java类中取消对super的调用

例如:

我有两个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测试通过吗?

我认为你做不到,这似乎不合逻辑。super.foo()的foo()方法调用是其实现的一部分——原则上,它可能是正确行为所必需的


也许您想要单独测试的功能需要分离到一个单独的方法中,并从foo()和您的测试中调用?

我同意重构测试可能是最简单的解决方案。有时候重构会比较困难,尤其是当我使用供应商库时。我希望我仍然可以在JRuby中这样做,因为这是Ruby中的一个选项。如果有另一个测试工具就好了。