说我有这样的代码:

boolean ret = a() && b() && c() && d() && e();

通常,仅当所有其他调用a()-d()返回true时,才调用e()。也许有一些编译器或JVM选项可以禁用短路评估,所以无论其他函数的结果如何,都将始终调用e()?

基本上我正在做一个大型系统的UAT,需要测试e(),但是设置确保所有a(),b()等返回true的环境和场景都是非常痛苦的...

编辑:好的,我猜想使用位AND而不是逻辑的可以提供某种解决方法,但是理想情况下,我正在寻找一种不需要在源代码中进行任何更改的解决方案。出于正式和技术上的原因(正如我提到的那样,系统很大,我们拥有在暂存区域之间进行代码的升级和部署以及获得批准的整个过程)。这仅用于测试,生产版本需要启用惰性评估(即使用&&)

事后:
  • “正确”的答案是:不,没有。
  • “有用”的答案:您可以将&&更改为&
  • “我到底做了什么”答案:远程调试系统,在表达式上放置断点,并告诉Eclipse运行e()-_-
  • 最佳答案

    没有用于更改 boolean 表达式求值语义的编译器或JVM选项。

    如果您不能修改源,则可能的选项(尽管不能保证)包括:

  • 通过精心设计重新创建您想要测试的条件
    前提条件的设置。
  • 使用模拟对象。
  • 破解编译器。
  • 入侵JVM。
  • 缠绕字节码。

  • 抱歉,所有这些都比编译器/JVM选项或修改源要困难得多。此外,最后三个选项(以及请求的编译器/JVM选项或修改源代码)违反了不修改所测试内容的正确测试协议(protocol)。

    关于java - 有没有办法禁用Java中的短路评估?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20422793/

    10-11 19:53
    查看更多