测试和调试
现在你的代码中已经充溢着Lambda表达式,看起来不错,也很简洁。
但是,大多数时候,我们受雇进行的程序开发工作的要求并不是编写优美的代码,而是编写正确的代码。
通常而言,好的软件工程实践一定少不了单元测试,借此保证程序的行为与预期一致。
测试用例
你编写测试用例,通过这些测试用例确保你代码中的每个组成部分都实现预期的结果。
比如,图形应用的一个简单的 Point 类,可以定义如下:
public class Point {
private final int x;
private final int y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public Point moveRightBy(int x) {
return new Point(this.x + x, this.y);
}
}
下面的单元测试会检查 moveRightBy 方法的行为是否与预期一致:
public class PointTest {
@Test
public void testMoveRightBy() {
Point p1 = new Point(5, 5);
Point p2 = p1.moveRightBy(10);
Assert.assertEquals(15, p2.getX());
Assert.assertEquals(5, p2.getY());
}
}
测试可见 Lambda 函数的行为
由于 moveRightBy 方法声明为public,测试工作变得相对容易。你可以在用例内部完成测试。
但是Lambda并无函数名(毕竟它们都是匿名函数),因此要对你代码中的Lambda函数进行测试实际上比较困难,因为你无法通过函数名的方式调用它们。
有些时候,你可以借助某个字段访问Lambda函数,这种情况,你可以利用这些字段,通过它们对封装在Lambda函数内的逻辑进行测试。
比如,我们假设你在 Point 类中添加了静态字段compareByXAndThenY(),通过该字段,使用方法引用你可以访问 Comparator 对象:
public class Point {
public final static Compara