package Ġcom . episode 6 . mock sp ress o 2 . plugins . mockito Ċ Ċ import Ġcom . episode 6 . mock sp ress o 2 . Mock sp ress o Builder Ċ import Ġcom . episode 6 . mock sp ress o 2 . Mock sp ress o Properties Ċ import Ġcom . episode 6 . mock sp ress o 2 . api . Fallback Object Maker Ċ import Ġcom . episode 6 . mock sp ress o 2 . dependency Ċ import Ġcom . episode 6 . mock sp ress o 2 . reflect . Dependency Key Ċ import Ġcom . episode 6 . mock sp ress o 2 . reflect . as J Class Ċ import Ġcom . episode 6 . mock sp ress o 2 . reflect . dependency Key Ċ import Ġcom . episode 6 . mock sp ress o 2 . reflect . type Token Ċ import Ġorg . mockito . Inc ub ating Ċ import Ġorg . mockito . Mockito Ċ import Ġorg . mockito . kotlin . K Stub bing Ċ import Ġorg . mockito . kotlin . Use Constructor Ċ import Ġorg . mockito . kotlin . spy Ċ import Ġorg . mockito . kotlin . with Settings Ċ import Ġorg . mockito . listeners . Invocation Listener Ċ import Ġorg . mockito . mock . Serializable Mode Ċ import Ġorg . mockito . stub bing . Answer Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠUse Ġmock ito Ġto Ġgenerate Ġfallback Ġobjects Ġfor Ġdependencies Ġthat Ġare Ġnot Ġpresent Ġin Ġthe Ġmock sp ress o Ġinstance Ċ Ġ*/ Ċ fun ĠMock sp ress o Builder . fallback With Mockito (): ĠMock sp ress o Builder Ġ= ĊĠ Ġmake Fallback Objects With ( object Ġ: ĠF allback Object Maker Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġ< T > Ġmake Object ( key : ĠDependency Key < T >): ĠT Ġ= ĠMockito . mock ( key . token . as J Class ()) ĊĠ Ġ}) Ċ Ċ /** Ċ Ġ* ĠAdd Ġa Ġmock Ġwith Ġthe Ġsupplied Ġparams Ġas Ġa Ġdependency Ġin Ġthis Ġmock sp ress o Ġinstance . ĠMock Ġwill Ġbe Ġbound Ġwith Ġthe Ċ Ġ* Ġsupplied Ġqualifier Ġannotation . ĠIf Ġyou Ġneed Ġa Ġreference Ġto Ġthe Ġmock Ġdependency , Ġconsider Ġ[ Mock sp ress o Properties . mock ] Ċ Ġ* Ġinstead . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny ?> ĠMock sp ress o Builder . mock ( ĊĠ Ġqualifier : ĠAnnotation ? Ġ= Ġnull , ĊĠ Ġextra Interfaces : ĠArray < out ĠK Class < out ĠAny >> ? Ġ= Ġnull , ĊĠ Ġname : ĠString ? Ġ= Ġnull , ĊĠ Ġspi ed Instance : ĠAny ? Ġ= Ġnull , ĊĠ Ġdefault Answer : ĠAnswer < Any >? Ġ= Ġnull , ĊĠ Ġserial izable : ĠBoolean Ġ= Ġfalse , ĊĠ Ġserial izable Mode : ĠSerializable Mode ? Ġ= Ġnull , ĊĠ Ġverbose Logging : ĠBoolean Ġ= Ġfalse , ĊĠ Ġinvocation Listeners : ĠArray < Invocation Listener >? Ġ= Ġnull , ĊĠ Ġstub Only : ĠBoolean Ġ= Ġfalse , ĊĠ Ġ@ Inc ub ating Ġuse Constructor : ĠUse Constructor ? Ġ= Ġnull , ĊĠ Ġ@ Inc ub ating Ġouter Instance : ĠAny ? Ġ= Ġnull , ĊĠ Ġ@ Inc ub ating Ġlen ient : ĠBoolean Ġ= Ġfalse Ċ ): ĠMock sp ress o Builder Ġ= Ġdependency ( qual ifier ) Ġ{ ĊĠ ĠMockito . mock ( ĊĠĠĠ ĠT :: class . java , ĊĠĠĠ Ġwith Settings ( ĊĠĠĠĠĠ Ġextra Interfaces Ġ= Ġextra Interfaces , ĊĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠ Ġspi ed Instance Ġ= Ġspi ed Instance , ĊĠĠĠĠĠ Ġdefault Answer Ġ= Ġdefault Answer , ĊĠĠĠĠĠ Ġserial izable Ġ= Ġserial izable , ĊĠĠĠĠĠ Ġserial izable Mode Ġ= Ġserial izable Mode , ĊĠĠĠĠĠ Ġverbose Logging Ġ= Ġverbose Logging , ĊĠĠĠĠĠ Ġinvocation Listeners Ġ= Ġinvocation Listeners , ĊĠĠĠĠĠ Ġstub Only Ġ= Ġstub Only , ĊĠĠĠĠĠ Ġuse Constructor Ġ= Ġuse Constructor , ĊĠĠĠĠĠ Ġouter Instance Ġ= Ġouter Instance , ĊĠĠĠĠĠ Ġlen ient Ġ= Ġlen ient ĊĠĠĠ Ġ) ĊĠ Ġ) !! Ċ } Ċ Ċ /** Ċ Ġ* ĠAdd Ġa Ġmock Ġwith Ġthe Ġsupplied Ġparams Ġas Ġa Ġdependency Ġin Ġthis Ġmock sp ress o Ġinstance . ĠMock Ġwill Ġbe Ġbound Ġwith Ġthe Ċ Ġ* Ġsupplied Ġqualifier Ġannotation . ĠIf Ġyou Ġneed Ġa Ġreference Ġto Ġthe Ġmock Ġdependency , Ġconsider Ġ[ Mock sp ress o Properties . mock ] Ċ Ġ* Ġinstead . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny ?> ĠMock sp ress o Builder . mock ( ĊĠ Ġqualifier : ĠAnnotation ? Ġ= Ġnull , ĊĠ Ġextra Interfaces : ĠArray < out ĠK Class < out ĠAny >> ? Ġ= Ġnull , ĊĠ Ġname : ĠString ? Ġ= Ġnull , ĊĠ Ġspi ed Instance : ĠAny ? Ġ= Ġnull , ĊĠ Ġdefault Answer : ĠAnswer < Any >? Ġ= Ġnull , ĊĠ Ġserial izable : ĠBoolean Ġ= Ġfalse , ĊĠ Ġserial izable Mode : ĠSerializable Mode ? Ġ= Ġnull , ĊĠ Ġverbose Logging : ĠBoolean Ġ= Ġfalse , ĊĠ Ġinvocation Listeners : ĠArray < Invocation Listener >? Ġ= Ġnull , ĊĠ Ġstub Only : ĠBoolean Ġ= Ġfalse , ĊĠ Ġ@ Inc ub ating Ġuse Constructor : ĠUse Constructor ? Ġ= Ġnull , ĊĠ Ġ@ Inc ub ating Ġouter Instance : ĠAny ? Ġ= Ġnull , ĊĠ Ġ@ Inc ub ating Ġlen ient : ĠBoolean Ġ= Ġfalse , ĊĠ Ġno inline Ġstub bing : ĠK Stub bing < T >. ( T ) Ġ-> ĠUnit Ċ ): ĠMock sp ress o Builder Ġ= Ġdependency ( qual ifier ) Ġ{ ĊĠ ĠMockito . mock ( ĊĠĠĠ ĠT :: class . java , ĊĠĠĠ Ġwith Settings ( ĊĠĠĠĠĠ Ġextra Interfaces Ġ= Ġextra Interfaces , ĊĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠ Ġspi ed Instance Ġ= Ġspi ed Instance , ĊĠĠĠĠĠ Ġdefault Answer Ġ= Ġdefault Answer , ĊĠĠĠĠĠ Ġserial izable Ġ= Ġserial izable , ĊĠĠĠĠĠ Ġserial izable Mode Ġ= Ġserial izable Mode , ĊĠĠĠĠĠ Ġverbose Logging Ġ= Ġverbose Logging , ĊĠĠĠĠĠ Ġinvocation Listeners Ġ= Ġinvocation Listeners , ĊĠĠĠĠĠ Ġstub Only Ġ= Ġstub Only , ĊĠĠĠĠĠ Ġuse Constructor Ġ= Ġuse Constructor , ĊĠĠĠĠĠ Ġouter Instance Ġ= Ġouter Instance , ĊĠĠĠĠĠ Ġlen ient Ġ= Ġlen ient ĊĠĠĠ Ġ) ĊĠ Ġ). apply Ġ{ ĠK Stub bing ( this ). stub bing ( this ) Ġ} !! Ċ } Ċ Ċ /** Ċ Ġ* ĠAdd Ġa Ġmock Ġwith Ġthe Ġsupplied Ġparams Ġas Ġa Ġdependency Ġin Ġthis Ġmock sp ress o Ġinstance . ĠMock Ġwill Ġbe Ġbound Ġwith Ġthe Ċ Ġ* Ġsupplied Ġqualifier Ġannotation Ġand Ġwill Ġbe Ġaccessible Ġvia Ġthe Ġreturned Ġlazy . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny ?> ĠMock sp ress o Properties . mock ( ĊĠ Ġqualifier : ĠAnnotation ? Ġ= Ġnull , ĊĠ Ġextra Interfaces : ĠArray < out ĠK Class < out ĠAny >> ? Ġ= Ġnull , ĊĠ Ġname : ĠString ? Ġ= Ġnull , ĊĠ Ġspi ed Instance : ĠAny ? Ġ= Ġnull , ĊĠ Ġdefault Answer : ĠAnswer < Any >? Ġ= Ġnull , ĊĠ Ġserial izable : ĠBoolean Ġ= Ġfalse , ĊĠ Ġserial izable Mode : ĠSerializable Mode ? Ġ= Ġnull , ĊĠ Ġverbose Logging : ĠBoolean Ġ= Ġfalse , ĊĠ Ġinvocation Listeners : ĠArray < Invocation Listener >? Ġ= Ġnull , ĊĠ Ġstub Only : ĠBoolean Ġ= Ġfalse , ĊĠ Ġ@ Inc ub ating Ġuse Constructor : ĠUse Constructor ? Ġ= Ġnull , ĊĠ Ġ@ Inc ub ating Ġouter Instance : ĠAny ? Ġ= Ġnull , ĊĠ Ġ@ Inc ub ating Ġlen ient : ĠBoolean Ġ= Ġfalse Ċ ): ĠLazy < T > Ġ= Ġdependency ( qual ifier ) Ġ{ ĊĠ ĠMockito . mock ( ĊĠĠĠ ĠT :: class . java , ĊĠĠĠ Ġwith Settings ( ĊĠĠĠĠĠ Ġextra Interfaces Ġ= Ġextra Interfaces , ĊĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠ Ġspi ed Instance Ġ= Ġspi ed Instance , ĊĠĠĠĠĠ Ġdefault Answer Ġ= Ġdefault Answer , ĊĠĠĠĠĠ Ġserial izable Ġ= Ġserial izable , ĊĠĠĠĠĠ Ġserial izable Mode Ġ= Ġserial izable Mode , ĊĠĠĠĠĠ Ġverbose Logging Ġ= Ġverbose Logging , ĊĠĠĠĠĠ Ġinvocation Listeners Ġ= Ġinvocation Listeners , ĊĠĠĠĠĠ Ġstub Only Ġ= Ġstub Only , ĊĠĠĠĠĠ Ġuse Constructor Ġ= Ġuse Constructor , ĊĠĠĠĠĠ Ġouter Instance Ġ= Ġouter Instance , ĊĠĠĠĠĠ Ġlen ient Ġ= Ġlen ient ĊĠĠĠ Ġ) ĊĠ Ġ) !! Ċ } Ċ Ċ /** Ċ Ġ* ĠAdd Ġa Ġmock Ġwith Ġthe Ġsupplied Ġparams Ġas Ġa Ġdependency Ġin Ġthis Ġmock sp ress o Ġinstance . ĠMock Ġwill Ġbe Ġbound Ġwith Ġthe Ċ Ġ* Ġsupplied Ġqualifier Ġannotation Ġand Ġwill Ġbe Ġaccessible Ġvia Ġthe Ġreturned Ġlazy . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny ?> ĠMock sp ress o Properties . mock ( ĊĠ Ġqualifier : ĠAnnotation ? Ġ= Ġnull , ĊĠ Ġextra Interfaces : ĠArray < out ĠK Class < out ĠAny >> ? Ġ= Ġnull , ĊĠ Ġname : ĠString ? Ġ= Ġnull , ĊĠ Ġspi ed Instance : ĠAny ? Ġ= Ġnull , ĊĠ Ġdefault Answer : ĠAnswer < Any >? Ġ= Ġnull , ĊĠ Ġserial izable : ĠBoolean Ġ= Ġfalse , ĊĠ Ġserial izable Mode : ĠSerializable Mode ? Ġ= Ġnull , ĊĠ Ġverbose Logging : ĠBoolean Ġ= Ġfalse , ĊĠ Ġinvocation Listeners : ĠArray < Invocation Listener >? Ġ= Ġnull , ĊĠ Ġstub Only : ĠBoolean Ġ= Ġfalse , ĊĠ Ġ@ Inc ub ating Ġuse Constructor : ĠUse Constructor ? Ġ= Ġnull , ĊĠ Ġ@ Inc ub ating Ġouter Instance : ĠAny ? Ġ= Ġnull , ĊĠ Ġ@ Inc ub ating Ġlen ient : ĠBoolean Ġ= Ġfalse , ĊĠ Ġno inline Ġstub bing : ĠK Stub bing < T >. ( T ) Ġ-> ĠUnit Ċ ): ĠLazy < T > Ġ= Ġdependency ( qual ifier ) Ġ{ ĊĠ ĠMockito . mock ( ĊĠĠĠ ĠT :: class . java , ĊĠĠĠ Ġwith Settings ( ĊĠĠĠĠĠ Ġextra Interfaces Ġ= Ġextra Interfaces , ĊĠĠĠĠĠ Ġname Ġ= Ġname , ĊĠĠĠĠĠ Ġspi ed Instance Ġ= Ġspi ed Instance , ĊĠĠĠĠĠ Ġdefault Answer Ġ= Ġdefault Answer , ĊĠĠĠĠĠ Ġserial izable Ġ= Ġserial izable , ĊĠĠĠĠĠ Ġserial izable Mode Ġ= Ġserial izable Mode , ĊĠĠĠĠĠ Ġverbose Logging Ġ= Ġverbose Logging , ĊĠĠĠĠĠ Ġinvocation Listeners Ġ= Ġinvocation Listeners , ĊĠĠĠĠĠ Ġstub Only Ġ= Ġstub Only , ĊĠĠĠĠĠ Ġuse Constructor Ġ= Ġuse Constructor , ĊĠĠĠĠĠ Ġouter Instance Ġ= Ġouter Instance , ĊĠĠĠĠĠ Ġlen ient Ġ= Ġlen ient ĊĠĠĠ Ġ) ĊĠ Ġ). apply Ġ{ ĠK Stub bing ( this ). stub bing ( this ) Ġ} !! Ċ } Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġreal Ġobject Ġof Ġ[ T ] Ġusing Ġmock sp ress o Ġthen Ġwrap Ġit Ġin Ġa Ġmock ito Ġ[ spy ]. ĠThis Ġspy Ġwill Ġbe Ġpart Ġof Ġthe Ġmock sp ress o Ċ Ġ* Ġgraph Ġand Ġcan Ġbe Ġused Ġby Ġother Ġreal Ġobjects Ġ( and Ġthen Ġverified Ġin Ġtest Ġcode ). Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny ?> ĠMock sp ress o Properties . spy ( qual ifier : ĠAnnotation ? Ġ= Ġnull ): ĠLazy < T > Ġ= ĊĠ Ġintercept Real Implementation ( dependency Key < T >( qual ifier ), Ġtype Token < T >()) Ġ{ Ġspy ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġreal Ġobject Ġof Ġ[ T ] Ġusing Ġmock sp ress o Ġthen Ġwrap Ġit Ġin Ġa Ġmock ito Ġ[ spy ]. ĠThis Ġspy Ġwill Ġbe Ġpart Ġof Ġthe Ġmock sp ress o Ċ Ġ* Ġgraph Ġand Ġcan Ġbe Ġused Ġby Ġother Ġreal Ġobjects Ġ( and Ġthen Ġverified Ġin Ġtest Ġcode ). ĠThe Ġ[ stub bing ] Ġwill Ġbe Ġapplied Ġto Ġthe Ċ Ġ* Ġspy Ġbefore Ġit Ġis Ġinjected Ġas Ġa Ġdependency Ġinto Ġother Ġclasses . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠAny ?> ĠMock sp ress o Properties . spy ( ĊĠ Ġqualifier : ĠAnnotation ? Ġ= Ġnull , ĊĠ Ġno inline Ġstub bing : ĠK Stub bing < T >. ( T ) Ġ-> ĠUnit Ċ ): ĠLazy < T > Ġ= Ġintercept Real Implementation ( dependency Key < T >( qual ifier ), Ġtype Token < T >()) Ġ{ Ġspy ( it , Ġstub bing ) Ġ} Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġreal Ġobject Ġof Ġtype Ġ[ IMPL ] Ġusing Ġmock sp ress o Ġthen Ġwrap Ġit Ġin Ġa Ġmock ito Ġ[ spy ] Ġ( the Ġobject Ġwill Ġbe Ġbound Ċ Ġ* Ġusing Ġtype Ġ[ BIND ]). ĠThis Ġspy Ġwill Ġbe Ġpart Ġof Ġthe Ġmock sp ress o Ġgraph Ġand Ġcan Ġbe Ġused Ġby Ġother Ġreal Ġobjects Ċ Ġ* Ġ( and Ġthen Ġverified Ġin Ġtest Ġcode ). Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠB IND Ġ: ĠAny ?, Ġre ified ĠIMP L Ġ: ĠB IND > ĠMock sp ress o Properties . spy Impl Of ( qual ifier : ĠAnnotation ? Ġ= Ġnull ): ĠLazy < IMPL > Ġ= ĊĠ Ġintercept Real Implementation ( dependency Key < BIND >( qual ifier ), Ġtype Token < IMPL >()) Ġ{ Ġspy ( it ) Ġ} Ċ Ċ /** Ċ Ġ* ĠCreate Ġa Ġreal Ġobject Ġof Ġtype Ġ[ IMPL ] Ġusing Ġmock sp ress o Ġthen Ġwrap Ġit Ġin Ġa Ġmock ito Ġ[ spy ] Ġ( the Ġobject Ġwill Ġbe Ġbound Ċ Ġ* Ġusing Ġtype Ġ[ BIND ]). ĠThis Ġspy Ġwill Ġbe Ġpart Ġof Ġthe Ġmock sp ress o Ġgraph Ġand Ġcan Ġbe Ġused Ġby Ġother Ġreal Ġobjects Ċ Ġ* Ġ( and Ġthen Ġverified Ġin Ġtest Ġcode ). ĠThe Ġ[ stub bing ] Ġwill Ġbe Ġapplied Ġto Ġthe Ġspy Ġbefore Ġit Ġis Ġinjected Ġas Ġa Ġdependency Ċ Ġ* Ġinto Ġother Ġclasses . Ċ Ġ*/ Ċ inline Ġfun Ġ< re ified ĠB IND Ġ: ĠAny ?, Ġre ified ĠIMP L Ġ: ĠB IND > ĠMock sp ress o Properties . spy Impl Of ( ĊĠ Ġqualifier : ĠAnnotation ? Ġ= Ġnull , ĊĠ Ġno inline Ġstub bing : ĠK Stub bing < IMPL >. ( IMPL ) Ġ-> ĠUnit Ċ ): ĠLazy < IMPL > Ġ= Ġintercept Real Implementation ( dependency Key < BIND >( qual ifier ), Ġtype Token < IMPL >()) Ġ{ Ġspy ( it , Ġstub bing ) Ġ} Ċ