package Ġcom . app ham . mock in izer Ċ Ċ import Ġandroidx . test . espress o . Id ling Registry Ċ import Ġandroidx . test . espress o . Id ling Resource Ċ import Ġcom . jak ew h art on . espress o . Ok Http 3 Id ling Resource Ċ import Ġokhttp 3 . Ok HttpClient Ċ import Ġokhttp 3 . logging . Http Logging Interceptor Ċ import Ġokhttp 3 . mock webserver . Mock WebServer Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Test Rule Ċ import Ġorg . junit . runner . Description Ċ import Ġorg . junit . runners . model . Statement Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġretrofit 2 . converter . gson . Gson Converter Factory Ċ Ċ internal Ġclass ĠMock WebServer Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġok HttpClient : ĠOk HttpClient Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġok HttpClient Builder . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġok HttpClient Builder : ĠOk HttpClient . Builder Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠOk HttpClient . Builder () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠOk Http Id ling Resource Rule Ġ: ĠTest Rule Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġresource : ĠId ling Resource Ġ= ĠOk Http 3 Id ling Resource . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" okhttp ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġapply ( base : ĠStatement , Ġdescription : ĠDescription ): ĠStatement Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠStatement () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġevaluate () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠId ling Registry . getInstance (). register ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbase . evaluate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠId ling Registry . getInstance (). unregister ( resource ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Ret rofit ( mock WebServer : ĠMock WebServer Ġ= ĠMock WebServer (). configure ()): ĠRet rofit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinterceptor Ġ= ĠHttp Logging Interceptor () ĊĠĠĠĠĠĠĠ Ġinterceptor . level Ġ= ĠHttp Logging Interceptor . Level . BODY ĊĠĠĠĠĠĠĠ Ġval Ġclient Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġok HttpClient Builder . add Interceptor ( interceptor ). mock in ize ( mocks , Ġmock WebServer ). build () ĊĠĠĠĠĠĠĠ Ġreturn ĠRet rofit . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. baseUrl ( BASE _ URL ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. client ( client ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add Converter Factory ( Gson Converter Factory . create ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġrule Ġ= ĠOk Http Id ling Resource Rule () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Start Stop Static Mock Server () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Server Ġ= ĠMock WebServer (). configure () ĊĠĠĠĠĠĠĠ Ġvar Ġapi Ġ= Ġcreate Ret rofit ( mock Server ). create ( Test Api :: class . java ) ĊĠĠĠĠĠĠĠ Ġapi . get Posts (). execute () ĊĠĠĠĠĠĠĠ ĠassertThat ( mock Server . port ). isEqualTo ( 3 4 5 6 7 ) ĊĊĠĠĠĠĠĠĠ ĠMock in izer . sh ut Down () ĊĠĠĠĠĠĠĠ ĠassertThat ( mock Server . port ). isEqualTo ( 3 4 5 6 7 ) ĊĊĠĠĠĠĠĠĠ Ġapi Ġ= Ġcreate Ret rofit ( mock Server ). create ( Test Api :: class . java ) ĊĠĠĠĠĠĠĠ Ġapi . get Posts (). execute () ĊĠĠĠĠĠĠĠ ĠassertThat ( mock Server . port ). isEqualTo ( 3 4 5 6 7 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Start Stop Custom Mock Server () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmock Server Ġ= ĠMock WebServer (). configure () ĊĠĠĠĠĠĠĠ Ġvar Ġapi Ġ= Ġcreate Ret rofit ( mock Server ). create ( Test Api :: class . java ) ĊĠĠĠĠĠĠĠ Ġapi . get Posts (). execute () ĊĠĠĠĠĠĠĠ ĠassertThat ( mock Server . port ). isEqualTo ( 3 4 5 6 7 ) ĊĊĠĠĠĠĠĠĠ Ġmock Server . shutdown () ĊĠĠĠĠĠĠĠ ĠassertThat ( mock Server . port ). isEqualTo ( 3 4 5 6 7 ) ĊĊĠĠĠĠĠĠĠ Ġapi Ġ= Ġcreate Ret rofit ( mock Server ). create ( Test Api :: class . java ) ĊĠĠĠĠĠĠĠ Ġapi . get Posts (). execute () ĊĠĠĠĠĠĠĠ ĠassertThat ( mock Server . port ). isEqualTo ( 3 4 5 6 7 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ ĠMock in izer . sh ut Down () ĊĠĠĠ Ġ} Ċ } Ċ