【问题标题】:How can I stub out a call to super in a imported Java class in JRuby for testing如何在 JRuby 的导入 Java 类中对 super 的调用存根以进行测试
【发布时间】:2010-02-27 19:09:09
【问题描述】:

我正在使用 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 测试通过?

【问题讨论】:

    标签: java testing jruby stub super


    【解决方案1】:

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

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

    【讨论】:

    • 我同意重构测试可能是最简单的解决方案。有时更难重构,尤其是当我使用供应商库时。我希望我仍然可以在 JRuby 中执行此操作,因为这是 Ruby 中的一个选项。很高兴有另一个测试工具。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2018-12-19
    • 1970-01-01
    • 2019-12-20
    • 1970-01-01
    相关资源
    最近更新 更多