Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
一个好的用于生产的断言类?Java';s相当于Groovy';什么是权力主张?_Java_Groovy_Assert_Contracts_Preconditions - Fatal编程技术网

一个好的用于生产的断言类?Java';s相当于Groovy';什么是权力主张?

一个好的用于生产的断言类?Java';s相当于Groovy';什么是权力主张?,java,groovy,assert,contracts,preconditions,Java,Groovy,Assert,Contracts,Preconditions,我不喜欢javaassert关键字,因为它并不总是在生产代码中启用。我正在寻找一个好的“ProductionAssert”类来使用,它总是运行著名的断言 一位候选人是。它很不错,但有点有限(例如,noassertEquals(),assertNull(),assertGreaterEquals()) 一种选择是包括jUnit或其他测试框架。。。但是我不愿意仅仅为了一个简单的断言类而依赖于整个测试框架 如果我用Groovy编程,我会使用 Java有好的“ProductionAssert”类吗 附言

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

一位候选人是。它很不错,但有点有限(例如,no
assertEquals()
assertNull()
assertGreaterEquals()

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

如果我用Groovy编程,我会使用

Java有好的“ProductionAssert”类吗


附言-一个选择是最终检查类似于。。。但我现在要找的是绝对最小的,零摩擦的,只需在构建过程中不做任何更改的情况下把它放到类中。。。我不确定合同是否符合该描述。

Spring在Spring核心模块中有一个


我倾向于使用Spring的类:


显然,如果你不使用spring,那么这不会让你的船浮起来,我不确定它是否比guava one好很多。

我会使用Junit。其目的是使用这些测试

另一种选择是确保始终打开断言。i、 如果你不能控制你的生产环境。如果程序未运行,则可能导致程序失败

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

第三种选择是自己编写这些方法。通常只有两行代码。这样他们就可以做你想做的任何事情。

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

对于前提条件(比如断言):

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

另请注意:您也可以使用相同的库进行常规输入验证(即抛出可恢复异常):

链接:


从头开始编写PowerAssert类难道不值得吗?@vulkanino-我开始这么做。。。但我通常更喜欢重用而不是重新实现,除非有很好的理由不这样做。是的,我也是,但你写了“绝对最小,零摩擦”…@vulkanino-嗯,我真正的意思是最小,零摩擦,因为我愿意添加一个小的maven依赖项。我没有想过如果断言没有打开,会导致程序失败——这是一个有趣的转折。现在我正在使用选项3,等待更多的答案/投票。
boolean assertOn = false;
assert assertOn = true;
if (!assertOn) 
   throw new AssertionError("Assertions must be turned on");
import static org.valid4j.Assertive.*;

require(x, greaterThan(0)); // throws RequireViolation extends AssertionError
import static org.valid4j.Validation.*;

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