我已经使用Java 8几个月了,我已经开始使用Lambda表达式,这在某些情况下非常方便.但是,我常常遇到一些问题,要对使用Lambda的代码进行单元测试.
以下面的伪代码为例:
private Bar bar;
public void method(int foo){
bar.useLambda(baz -> baz.setFoo(foo));
}
Run Code Online (Sandbox Code Playgroud)
一种方法是仅仅验证条形码上的呼叫
verify(bar).useLambda(Matchers.<Consumer<Baz>>.any());
Run Code Online (Sandbox Code Playgroud)
但是,通过这样做,我不测试Lambda的代码.
另请注意,我无法使用方法替换Lambda并使用方法引用:
bar.useLambda(This::setFooOnBaz);
Run Code Online (Sandbox Code Playgroud)
因为我不会在那个方法上有foo.或者至少这是我的想法.
你以前遇到过这个问题吗?如何测试或重构我的代码以正确测试?
编辑
因为我编码的是单元测试,我不想实例化bar,而我将使用mock.所以我将无法验证baz.setFoo通话.