package Ġbr . com . ac mat tos . hdc . common . tool . exception Ċ Ċ import Ġbr . com . ac mat tos . hdc . common . context . config . Message Tracker Code Enum . CA UG HT _ EXCEPTION Ċ import Ġbr . com . ac mat tos . hdc . common . tool . exception . Exception Catch er . catch Ċ import Ġbr . com . ac mat tos . hdc . common . tool . log gable . Log Events Appender Ċ import Ġch . qos . log back . classic . Level Ċ import Ġorg . assertj . core . api . Abstract Throwable Assert Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . assertj . core . api . Assertions . assertThat Code Ċ import Ġorg . spe k framework . spe k 2 . Spe k Ċ import Ġorg . spe k framework . spe k 2 . style . g her kin . Feature Ċ Ċ private Ġconst Ġval ĠTEST Ġ= Ġ" TEST " Ċ private Ġconst Ġval ĠLOGGER _ MESSAGE Ġ= Ġ" [$ TEST ] Ġ- ĠTrace ĠMessage " Ċ private Ġconst Ġval ĠEXCEPTION _ MESSAGE Ġ= Ġ" Exception ĠMessage " Ċ private Ġconst Ġval ĠLOGGER _ EXCEPTION _ MESSAGE Ġ= Ġ"$ EXCEPTION _ MESSAGE Ġ> Ġ[ CATCH ER ] Ġ$ LOGGER _ MESSAGE " Ċ private Ġconst Ġval ĠCA USE _ MESSAGE Ġ= Ġ" Cause ĠMessage " Ċ private Ġconst Ġval ĠLOGGER _ CA USE _ MESSAGE Ġ= Ġ"$ CA USE _ MESSAGE Ġ> Ġ[ CATCH ER ] Ġ$ LOGGER _ MESSAGE " Ċ private Ġconst Ġval ĠNO _ MESSAGE Ġ= Ġ" No Ġmessage Ġwas Ġprovided Ġfor Ġthis Ġexception !" Ċ private Ġconst Ġval ĠLOGGER _ NO _ MESSAGE Ġ= Ġ"$ NO _ MESSAGE Ġ> Ġ[ CATCH ER ] Ġ$ LOGGER _ MESSAGE " Ċ Ċ /** Ċ Ġ* Ġ@ author ĠAC Mat tos Ċ Ġ* Ġ@ since Ġ 0 1 / 1 0 / 2 0 2 1 . Ċ Ġ*/ Ċ object ĠException Catch er Test : ĠSpe k ({ ĊĠĠĠ ĠFeature ("${ Exception Catch er :: class . java } Ġusage ") Ġ{ ĊĠĠĠĠĠĠĠ ĠScenario (" ex . message Ġwas Ġfound ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġblock : Ġ() Ġ-> ĠException ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġapp ender : ĠLog Events Appender ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġassertion : ĠAbstract Throwable Assert < *, Ġout ĠThrowable > ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGiven (""" a Ġblock Ġthat Ġthrows Ġan Ġ${ Exception :: class . java } """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Ġ= Ġ{ Ġthrow ĠException ( EXCEPTION _ MESSAGE ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" a Ġprepared Ġ${ Log Events Appender :: class . java } """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp ender Ġ= ĠLog Events Appender ( Exception Catch er :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWhen (""" # catch Ġis Ġexecuted """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertion Ġ= ĠassertThat Code Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {}] Ġ- ĠTrace ĠMessage ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC AU G HT _ EXCEPTION . code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (""" ${ InternalServerError Exception :: class . java } Ġis Ġraised """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertion . has Same Class As ( InternalServerError Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEXCEPTION _ MESSAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC AU G HT _ EXCEPTION . code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠException ( EXCEPTION _ MESSAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" message Ġis Ġ$ EXCEPTION _ MESSAGE """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertion . has Message ( EXCEPTION _ MESSAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" code Ġis Ġ${ CA UG HT _ EXCEPTION . code } """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertion . has Field Or Property WithValue (" code ", ĠC AU G HT _ EXCEPTION . code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" the Ġmessage Ġis Ġ$ LOGGER _ MESSAGE """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . getMessage ( 0 )). isEqualTo ( LOGGER _ MESSAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (" the Ġlevel Ġis Ġ${ Level . TRACE }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . get Logging Event ( 0 ). level ). isEqualTo ( Level . TRACE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" the Ġmessage Ġis Ġ$ LOGGER _ EXCEPTION _ MESSAGE """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . getMessage ( 1 )). isEqualTo ( LOGGER _ EXCEPTION _ MESSAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (" the Ġlevel Ġis Ġ${ Level . ERROR }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . get Logging Event ( 1 ). level ). isEqualTo ( Level . ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠScenario (" ex . cause . message Ġwas Ġfound ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġblock : Ġ() Ġ-> ĠException ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġapp ender : ĠLog Events Appender ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġassertion : ĠAbstract Throwable Assert < *, Ġout ĠThrowable > ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGiven (""" a Ġblock Ġthat Ġthrows Ġan Ġ${ Exception :: class . java } """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Ġ= Ġ{ Ġthrow ĠException ( Exception ( CA USE _ MESSAGE )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" a Ġprepared Ġ${ Log Events Appender :: class . java } """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp ender Ġ= ĠLog Events Appender ( Exception Catch er :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWhen (""" # catch Ġis Ġexecuted """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertion Ġ= ĠassertThat Code Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch ("[ {}] Ġ- ĠTrace ĠMessage ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC AU G HT _ EXCEPTION . code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (""" ${ InternalServerError Exception :: class . java } Ġis Ġraised """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertion . has Same Class As ( InternalServerError Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCA USE _ MESSAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC AU G HT _ EXCEPTION . code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠException ( Exception ( CA USE _ MESSAGE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" message Ġis Ġ$ CA USE _ MESSAGE """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertion . has Message ( CA USE _ MESSAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" code Ġis Ġ${ CA UG HT _ EXCEPTION . code } """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertion . has Field Or Property WithValue (" code ", ĠC AU G HT _ EXCEPTION . code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" the Ġmessage Ġis Ġ$ LOGGER _ MESSAGE """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . getMessage ( 0 )). isEqualTo ( LOGGER _ MESSAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (" the Ġlevel Ġis Ġ${ Level . TRACE }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . get Logging Event ( 0 ). level ). isEqualTo ( Level . TRACE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" the Ġmessage Ġis Ġ$ LOGGER _ CA USE _ MESSAGE """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . getMessage ( 1 )). isEqualTo ( LOGGER _ CA USE _ MESSAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (" the Ġlevel Ġis Ġ${ Level . ERROR }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . get Logging Event ( 1 ). level ). isEqualTo ( Level . ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (" there Ġis Ġno Ġmore Ġlog Ġmessages ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . events Size ()). isEqualTo ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠScenario (" no Ġex Ġmessage Ġwas Ġfound ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġblock : Ġ() Ġ-> ĠException ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġapp ender : ĠLog Events Appender ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġassertion : ĠAbstract Throwable Assert < *, Ġout ĠThrowable > ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGiven (""" a Ġblock Ġthat Ġthrows Ġan Ġ${ Exception :: class . java } """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Ġ= Ġ{ Ġthrow ĠException () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" a Ġprepared Ġ${ Log Events Appender :: class . java } """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp ender Ġ= ĠLog Events Appender ( Exception Catch er :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWhen (""" # catch Ġis Ġexecuted """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertion Ġ= ĠassertThat Code Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {}] Ġ- ĠTrace ĠMessage ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC AU G HT _ EXCEPTION . code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (""" ${ InternalServerError Exception :: class . java } Ġis Ġraised """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertion . has Same Class As ( InternalServerError Exception ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNO _ MESSAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC AU G HT _ EXCEPTION . code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠException () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" message Ġis Ġ$ NO _ MESSAGE """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertion . has Message ( NO _ MESSAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" code Ġis Ġ${ CA UG HT _ EXCEPTION . code } """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertion . has Field Or Property WithValue (" code ", ĠC AU G HT _ EXCEPTION . code ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" the Ġmessage Ġis Ġ$ LOGGER _ MESSAGE """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . contains Message ( LOGGER _ MESSAGE )). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (" the Ġlevel Ġis Ġ${ Level . TRACE }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . get Logging Event ( 0 ). level ). isEqualTo ( Level . TRACE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" the Ġmessage Ġis Ġ$ LOGGER _ NO _ MESSAGE """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . contains Message ( LOGGER _ NO _ MESSAGE )). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (" the Ġlevel Ġis Ġ${ Level . ERROR }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . getMessage Level ( LOGGER _ NO _ MESSAGE )). isEqualTo ( Level . ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠScenario (" no Ġ${ InternalServerError Exception :: class . java } Ġthrown ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġblock : Ġ() Ġ-> ĠUnit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġapp ender : ĠLog Events Appender ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġassertion : ĠAbstract Throwable Assert < *, Ġout ĠThrowable > ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGiven (""" a Ġblock Ġthat Ġdoes Ġnot Ġthrow Ġany Ġ${ Exception :: class . java } """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock Ġ= Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" a Ġprepared Ġ${ Log Events Appender :: class . java } """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp ender Ġ= ĠLog Events Appender ( Exception Catch er :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠWhen (""" # catch Ġis Ġexecuted """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertion Ġ= ĠassertThat Code Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcatch ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"[ {}] Ġ- ĠTrace ĠMessage ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC AU G HT _ EXCEPTION . code , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTEST ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġblock () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (""" ${ InternalServerError Exception :: class . java } Ġis Ġraised """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassertion . does Not Throw Any Exception () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (""" the Ġmessage Ġis Ġ$ LOGGER _ MESSAGE """) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . contains Message ( LOGGER _ MESSAGE )). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnd (" the Ġlevel Ġis Ġ${ Level . TRACE }") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( appender . getMessage Level ( LOGGER _ MESSAGE )). isEqualTo ( Level . TRACE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ