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

时间:2010-02-27 19:09:09

标签: java testing jruby stub super

我正在使用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();
  } 
}

我只是试图测试B.foo中的代码,而不是使用JRuby测试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测试通过?

1 个答案:

答案 0 :(得分:1)

我认为你不能,而且似乎不合逻辑。 super.foo()的foo()方法调用是它实现的一部分 - 原则上,它可能是正确行为的必要条件。

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