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

标签 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();
  } 
}

我只是想用 JRuby 测试 B.foo 中的代码,而不是 A.foo 中的代码。如何在我的 RSpec 测试中停止对父类(super class)方法的调用?

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 类.

是否还有其他想法来消除父类(super class)方法以使我的 RSpec 测试通过?

最佳答案

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

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

关于java - 如何在 JRuby 中导入的 Java 类中停止对 super 的调用以进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2348568/

相关文章:

java - 如何将 java 对象 (JList) 导出/导入 java 程序?

java - Java 中的 Canny 边缘检测器

android - 自动化 Android Monkey 运行的想法

java - 对于某些类,使用 JRuby 中的 Mahout 会引发 "missing class or uppercase package name"

Ruby 和 JRuby 在同一台 Windows 7 计算机上

java - 为什么另一个线程在同步部分尚未完成时可以访问阻塞对象?

java - 为什么在 Linux 上使用 Java Attach API 会失败? (即使 Maven 构建完成)

testing - 步骤 ‘Run Tests on AWS Device Farm’ 由于异常 : javax.net.ssl.SSLHandshakeException 而中止:无法生成 secret

git - 如何设计一个 git 存储库架构,以便在所有分支上进行统一测试?

java - 在 JRuby 中重写重载的 Java 方法