Groovy中是否存在肯定的断言消息?
有这样的情况: 其输出:Groovy中是否存在肯定的断言消息?,groovy,assertions,Groovy,Assertions,有这样的情况: 其输出: Caught: java.lang.AssertionError: Name should be John. Expression: (name == Peter). Values: name = John java.lang.AssertionError: Name should be John. Expression: (name == Peter). Values: name = John 但是如果该语句为true,则日志中没有任何信息。因此,当您(或您的同事)
Caught: java.lang.AssertionError: Name should be John. Expression: (name == Peter). Values: name = John
java.lang.AssertionError: Name should be John. Expression: (name == Peter). Values: name = John
但是如果该语句为true
,则日志中没有任何信息。因此,当您(或您的同事)稍后检查日志时(同事不知道您执行的检查),您不知道发生了什么断言
所以我想记录积极的断言。类似(添加正面消息?“Name is”+Name
):
它存在吗?我知道我可以在断言之后记录消息,例如:
log(“断言是正确的:名称是”+Name)
,但我想在一行断言中这样做。没有像肯定断言消息这样的东西,因为它在一般情况下没有多大意义。让我们考虑一下你已经发布的例子:
assert name == "Peter" : "Name should be John" ? "Name is " + name
当表达式name==“Peter”
计算结果为false
时,发生的事情很简单-java.lang.AssertionError
与消息一起抛出name should is John
。本例中的正向分支并不简单-消息Name是${Name}
应该记录到哪里?使用simpleprintln
或可能使用slf4j的log.info()
或log.debug
?明确的决定在哪里?如果我不想在日志中包含这样的信息,因为它只会产生开销,该怎么办
当然,您可以定义自己的方法,如:
void doAssert(boolean expr1, String errorMessage, Closure<Void> onSuccess = null) {
assert expr : errorMessage
onSuccess?.call()
}
但从长远来看,这可能是一种过分的做法——您只为一些调试信息创建一个闭包对象。您始终可以修改此方法并注释掉onSuccess?.call()
,以限制调用闭包时产生的一些开销,尽管闭包的对象(以及相关的Java匿名类)仍然会被创建
但我想你会发现,上述方法所需的工作量与:
assert name == "Peter" : "Name should be John"
log.info("Name is ${name}")
我宁愿建议使用断言,因为它们是经过设计的,不会产生太多开销。您可以随时记录重要信息,但它必须对维护人员有意义。我不认为得到满足特定断言的信息有多大价值——我知道这是因为程序继续计算。希望它能帮助你做出正确的决定。如果它很重要,那就做一个明确的日志。总有一天,有人会用正确的错误检查来替换断言,然后这个重要的日志可能会过时。
void doAssert(boolean expr1, String errorMessage, Closure<Void> onSuccess = null) {
assert expr : errorMessage
onSuccess?.call()
}
doAssert name == "Peter", "Name should be John", {
log.info("Name is ${name}")
}
assert name == "Peter" : "Name should be John"
log.info("Name is ${name}")