以下测试失败
@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 确保两个值相等的使用技巧和注意事项,需要的朋友参考一下 示例 比较两个值是否相等。它只能比较字符串,整数和布尔值。
我有两个类,一个被设计用来包含另一个 然而,我不能相互引用类类型(和),只能是其中之一。 我怎样才能在彼此之间引用这两个类类型呢?否则最好的方法是什么?