【发布时间】:2019-03-16 05:00:34
【问题描述】:
在我的应用程序代码中,在应用程序使用过程中出现问题的地方很常见,我希望尽可能多地记录有关情况的信息,包括如果适用,包括已抛出的 Exception 的堆栈跟踪。
但在测试期间,我不希望记录这些堆栈跟踪,从而使日志文件变得毫无意义。
如果在这种情况下,测试本身会创建一个 Exception 对象,您可能会给它一个消息,将其识别为虚拟 Exception,如下所示:
given:
indexMgr.queryParser = Mock( QueryParser ){
parse(_) >> { throw new Exception( 'dummy parse problem' )}
}
然后在应用代码中执行以下操作:
try {
query = queryParser.parse(queryString)
}catch( e ) {
log.debug( "QP exception msg: $e.message" )
// we don't want a stack trace to be logged if this is a dummy Exception deliberately thrown during testing
if( ! e.message.contains( 'dummy' )) {
// this will log the stack trace of e
log.error( 'query threw Exception in QP.parse()', e )
}
return false
}
...但是这样做有两个问题:首先,预期的Exception 并非总是由测试代码而不是应用程序代码创建的,其次是感觉不对检查在实际应用代码中识别测试行为的条件。
是否有解决此问题的“最佳实践”方法?
【问题讨论】:
标签: testing exception logging spock