6

我不喜欢 javaassert关键字,因为它并不总是在生产代码中启用。我正在寻找一个好的“ProductionAssert”类来使用,它总是运行提到的断言。

一个候选者是Guava 的先决条件。它很不错,但有点有限(例如,不,,,assertEquals())。assertNull()assertGreaterEquals()

一种选择是包括 jUnit 或另一个测试框架......但我不愿意仅仅为了一个简单的断言类而依赖整个测试框架。

如果我在 Groovy 中编程,我会使用PowerAssert

Java 是否有一个好的“ProductionAssert”类?

PS-一种选择是最终检查Java Contracts之类的东西……但是我现在正在寻找的是绝对最小的零摩擦,只需将其放入而无需对构建过程进行任何更改类。 .. 我不确定合同是否符合该描述。

4

4 回答 4

5
于 2012-02-07T12:36:26.800 回答
3

我会使用Junit。它旨在使用这些测试。

另一种选择是确保断言始终处于打开状态。即如果你不能控制你的生产环境。如果不是,您可能会导致程序失败。

boolean assertOn = false;
assert assertOn = true;
if (!assertOn) 
   throw new AssertionError("Assertions must be turned on");

第三种选择是自己编写这些方法。通常只有两行代码。这样他们就会做你想做的一切。

于 2012-02-07T12:51:57.120 回答
1

Spring 在 spring-core 模块中有一个,Assert


于 2012-02-07T12:33:45.767 回答
0

您可以将 valid4j 与 hamcrest-matchers 一起使用(在 Maven Central 上以 org.valid4j:valid4j 的形式找到)。默认提供者会抛出 AssertionError,但如果需要,您可以注册自己的自定义全局策略。

对于前提条件(真的像断言):

import static org.valid4j.Assertive.*;

require(x, greaterThan(0)); // throws RequireViolation extends AssertionError

使用“确保”对后置条件的类似支持。

附带说明:您也可以使用相同的库进行常规输入验证(即抛出可恢复的异常):

import static org.valid4j.Validation.*;

validate(argument, isValid(), otherwiseThrowing(InvalidException.class));

链接:

于 2016-01-19T19:18:11.520 回答