В моем коде приложения часто бывает так, что когда что-то идет не так во время использования приложения, я хочу получить как можно больше информации об обстоятельствах, которые должны быть зарегистрированы, включая, если применимо, трассировку стека 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
будет создаваться кодом тестирования, а не кодом приложения, и во-вторых, он считает неправильным проверку условий, определяющих поведениетеста в реальном коде приложения.
Есть ли "лучший метод" для решения этой проблемы?