当前位置: 首页 > 面试题库 >

两个确切的方法引用不相等

籍英叡
2023-03-14
问题内容

以下测试失败

@Test
public void test() {
    Function<String, Integer> foo = Integer::parseInt;
    Function<String, Integer> bar = Integer::parseInt;
    assertThat(foo, equalTo(bar));
}

有什么办法让它通过吗?

编辑 :我将尝试使其更加清晰。

可以说我有这些课程:

class A {
  public int foo(Function<String, Integer> foo) {...}
}

class B {
  private final A a; // c'tor injected
  public int bar() {
    return a.foo(Integer::parseInt);
  }
}

现在说我想为B编写单元测试:

@Test
public void test() {
  A a = mock(A.class);
  B b = new B(a);
  b.bar();
  verify(a).foo(Integer::parseInt);
}

问题是测试失败,因为方法引用不相等。


问题答案:

Lambda不被缓存,这似乎是有意的。无法比较两个lambda以查看它们是否会做相同的事情。

你需要做类似的事情

static final Function<String, Integer> parseInt = Integer::parseInt;

@Test
public void test() {
    Function<String, Integer> foo = parseInt;
    Function<String, Integer> bar = parseInt;
    assertThat(foo, equalTo(bar));
}

Brian
Goetz的回答;有没有办法比较lambda?



 类似资料:
  • 我改变了切入点的顺序,它总是排在第二位。关于如何解决这个问题有什么想法吗? 更新 一旦我发布了这个问题,我就有了一个想法。我这样更改了切入点: 现在异常消失了,但仍然有一个小问题(我想这个问题更容易解决):因为ArrayList实现了可序列化,所以至少在我使用ArrayList的测试用例中,两个切入点都被执行了。 我将对此进行研究,并发布我的发现,但也感谢您的帮助;) 我将代码改为只使用一个切入点

  • 有时候在设计数据结构的时候,可能会遇到两个类需要相互引用的情形。比如类A有类型为B的成员,而类B又有类型为A的成员。 那么这种情形下,两个类的设计上需要注意什么呢? 同一文件 尝试方案 将A和B的定义都放在一个文件中,例如: #include <iostream> class A { public: A() { aa_ = 'A'; } char aa_;

  • 问题内容: 如何检查两个切片是否相等? 问题答案: 您需要遍历切片中的每个元素并进行测试。未定义切片的相等性。但是,如果要比较type的值,则有一个函数。

  • 如何检查两个切片是否相等?

  • 本文向大家介绍sitecore 确保两个值相等,包括了sitecore 确保两个值相等的使用技巧和注意事项,需要的朋友参考一下 示例 比较两个值是否相等。它只能比较字符串,整数和布尔值。            

  • 我有两个类,一个被设计用来包含另一个 然而,我不能相互引用类类型(和),只能是其中之一。 我怎样才能在彼此之间引用这两个类类型呢?否则最好的方法是什么?