如何测试匿名 class?
how do I test anonymous class?
很少有遗留代码使用匿名 class,它最终成为单个文件中的大部分代码。我想知道是否有测试匿名 class 的方法?
例如:
if (wp.speed != null && wp.speed >= 0) {
FlightProtocol fp = new FlightProtocol() { //starts here
@Override
public Query getQuery() {
Query q = Query.empty();
if (wp.minSpeed < 0)
q = Query.and(q, Query.eq(Speed.Function, WayPoint));
else {
q = Query.and(q, Query.eq(Speed.Function, Field));
q = Query.and(q, Query.eq(Speed.Calc, wp.maxSpeed-wp.minSpeed));
}
q = Query.and(q, Query.eq(Speed.Id, wp.altitude/greatCircle));
return q;
}
} else { ...}
所以像这样或类似的东西甚至可以进行单元测试?
为什么要测试内部class?
为了确保行为是预期的测试外部 class 或方法。
只需按原样使用 class 并测试外部 class / 方法的行为是否符合预期。 您无需测试内部 class 即可确保其行为正确。
来自 dimo414 评论的很棒的插件。
You shouldn't need to test the inner class. It's entirely possible for an inner class to have overly-complex behavior, at which point it should be pulled out into its own code block and tested like any other code.
您不能直接测试匿名 class。您应该重构您的匿名 class 使其不是匿名的,或者只测试包含 class.
的 public API
lambda表达式也是如此。如果您希望能够对您的功能进行单元测试,则不能内联定义该功能。
单元测试的目的是验证 public
API 的行为。匿名 class 是一个实现细节,编写单元测试以(直接)验证其工作方式会使您的测试变得脆弱。而是编写测试来验证调用匿名 class.
的代码
如果您的匿名 class 的行为非常复杂,您想单独测试它,那么它不应该是匿名的。将它提取到它自己的 class 中(可能作为包私有静态内部 class)然后你可以正常测试它。
很少有遗留代码使用匿名 class,它最终成为单个文件中的大部分代码。我想知道是否有测试匿名 class 的方法?
例如:
if (wp.speed != null && wp.speed >= 0) {
FlightProtocol fp = new FlightProtocol() { //starts here
@Override
public Query getQuery() {
Query q = Query.empty();
if (wp.minSpeed < 0)
q = Query.and(q, Query.eq(Speed.Function, WayPoint));
else {
q = Query.and(q, Query.eq(Speed.Function, Field));
q = Query.and(q, Query.eq(Speed.Calc, wp.maxSpeed-wp.minSpeed));
}
q = Query.and(q, Query.eq(Speed.Id, wp.altitude/greatCircle));
return q;
}
} else { ...}
所以像这样或类似的东西甚至可以进行单元测试?
为什么要测试内部class?
为了确保行为是预期的测试外部 class 或方法。
只需按原样使用 class 并测试外部 class / 方法的行为是否符合预期。 您无需测试内部 class 即可确保其行为正确。
来自 dimo414 评论的很棒的插件。
You shouldn't need to test the inner class. It's entirely possible for an inner class to have overly-complex behavior, at which point it should be pulled out into its own code block and tested like any other code.
您不能直接测试匿名 class。您应该重构您的匿名 class 使其不是匿名的,或者只测试包含 class.
的 public APIlambda表达式也是如此。如果您希望能够对您的功能进行单元测试,则不能内联定义该功能。
单元测试的目的是验证 public
API 的行为。匿名 class 是一个实现细节,编写单元测试以(直接)验证其工作方式会使您的测试变得脆弱。而是编写测试来验证调用匿名 class.
如果您的匿名 class 的行为非常复杂,您想单独测试它,那么它不应该是匿名的。将它提取到它自己的 class 中(可能作为包私有静态内部 class)然后你可以正常测试它。