我想在我的应用程序中的方法中添加字段验证(例如,字段不为空且为正)。
private void assertionTest(Integer i) {
// want to first assert here that i is not null and positive
// something like:
// Preconditions.checkArgument( i != null && i > 0, "i should be non null positive number!" );
//
System.out.println( "i: " + i);
}
Java 8引入了Objects类,它具有一些用于空检查验证的基本实用方法:
public static <T> T requireNonNull(T obj)
public static <T> T requireNonNull(T obj, String message)
但是它仍然缺少guava的Preconditions类提供的详尽的验证列表,如下所示:
checkArgument(boolean) throws IllegalArgumentException
checkState(boolean) throws IllegalStateException
etc.
Java 8+中是否有更好的替代方法用于字段验证,这样我就不必为guava包含外部库了?
Java 8+(直到12)没有这样的方法(可能在将来会出现一些变化)。
assert <condition> : <message>
如果断言失败,AssertionError
将与<message>
一起投掷。
但是,您应该确保通过向JVM添加-ea
属性来激活它。
断言为失败的案例添加更有意义的信息。
apache-commons-lang
Validate类:
Validate.notNull(i, "this parameter can't be null")
Validate.isTrue(i > 0, "The value must be greater than zero: %d", i);
我想你可以使用Apache Commons Lang。他们在Validate class有很多验证方法。我不确定它是否足够表达,但如果你还需要其他任何东西,只为自己编写它就可以了,简单的检查应该没有太多的代码。
此外,如果您希望将这些检查集成到主要业务逻辑代码中(而不仅仅是单元测试),那么您应该查看Bean Validation。这样你绝对不会重新发明轮子,你的测试只需要从验证框架中得到例外。
干杯。
我使用spring验证,但有时我通过扩展spring验证来控制一些自定义行为来编写验证
如果您更喜欢验证方法,为什么不自己编写?很多人都这样做。它简单,快速,不需要任何外部依赖。
请记住,如果具有表达名称的条件,大多数这些方法都很简单!
然后是JSR 380 a.k.a“Bean Validation”。它允许您使用注释定义验证约束:
void assertionTest (@NotNull @PositiveOrZero Integer i) { ... }
BV对于大型应用有几个好处: