代码之家  ›  专栏  ›  技术社区  ›  Matteo NNZ

有没有可能比较两个空Runnable是否相等?

  •  0
  • Matteo NNZ  · 技术社区  · 5 年前

    我有一个返回 Runnable .在某些情况下,它将返回空runnable( () -> {} )我想测试一下这些情况是否得到了很好的尊重。

    因此,我想做一些简单的单元测试,比如:

    private static final Runnable EMPTY = () -> {};
    
    @Test
    public void test() {
        Runnable action = myObject.myMethod(myParameters);
        assertEquals(EMPTY, action);
    }
    

    显然,从那以后,上述方法就不起作用了 可运行的 是一个功能接口,我想这将取决于我来覆盖 equals 方法,否则我只调用超类中的一个 Object 因此,我的主张会失败。

    一方面,我明白这很难(或者根本不可能?)测试可能包含任何内容的两个可运行项的相等性。 另一方面,我真的很想测试runnable是否为空,而不是其他。

    所以现在,我创造了一个 public static final Runnable EMPTY 上 myObject 我需要时返回的类:

    public class MyObject {
        public static final Runnable EMPTY = () -> {};
        
        public Runnable myMethod(MyParameters myParameters) {
            if (something) {
                return EMPTY;
            }
            //...
            if (somethingElse) {
                return EMPTY;
            }
            //...
            return anotherRunnable;
        }
    }
    

    然后我从测试中引用了这个实例,它适用于有限数量的测试:

    assertEquals(MyObject.EMPTY, action);
    

    但是 可运行的 可能有一天也会从外部提供,这意味着我无法控制空runnable正是我的静态空实例这一事实,在这种情况下,我真的需要知道提供的runnable是否为空。

    知道吗?我是在要求一些不可能的事情吗?

    0 回复  |  直到 5 年前
        1
  •  1
  •   talex    5 年前

    简短回答: 这是不可能的 .

    详细回答:这是可能的,但您不想这样做,因为您必须为所说的代码反汇编类文件 Runnable 并检查方法体。这太费劲了。应该有更简单的方法来达到你想要的结果。