@@ -31,19 +31,28 @@ public abstract class GeocoderTest
3131 new object [ ] { "miss, MO" }
3232 } ;
3333
34- private readonly IGeocoder _geocoder ;
34+ private IGeocoder ? _geocoder ;
3535 protected readonly SettingsFixture _settings ;
3636
3737 public GeocoderTest ( SettingsFixture settings )
3838 {
3939 //Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-us");
4040
4141 _settings = settings ;
42- _geocoder = CreateGeocoder ( ) ;
4342 }
4443
4544 protected abstract IGeocoder CreateGeocoder ( ) ;
4645
46+ private IGeocoder GetGeocoder ( )
47+ {
48+ return _geocoder ??= CreateGeocoder ( ) ;
49+ }
50+
51+ protected TGeocoder GetGeocoder < TGeocoder > ( ) where TGeocoder : class , IGeocoder
52+ {
53+ return GetGeocoder ( ) as TGeocoder ?? throw new InvalidOperationException ( $ "Expected geocoder of type { typeof ( TGeocoder ) . Name } .") ;
54+ }
55+
4756 protected static async Task RunInCultureAsync ( string cultureName , Func < Task > action )
4857 {
4958 CultureInfo originalCulture = CultureInfo . CurrentCulture ;
@@ -68,7 +77,7 @@ protected static async Task RunInCultureAsync(string cultureName, Func<Task> act
6877 public virtual async Task Geocode_ValidAddress_ReturnsExpectedResult ( string address )
6978 {
7079 // Act
71- var addresses = ( await _geocoder . GeocodeAsync ( address , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
80+ var addresses = ( await GetGeocoder ( ) . GeocodeAsync ( address , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
7281
7382 // Assert
7483 addresses [ 0 ] . AssertWhiteHouse ( ) ;
@@ -78,7 +87,7 @@ public virtual async Task Geocode_ValidAddress_ReturnsExpectedResult(string addr
7887 public virtual async Task Geocode_NormalizedAddress_ReturnsExpectedResult ( )
7988 {
8089 // Act
81- var addresses = ( await _geocoder . GeocodeAsync ( "1600 pennsylvania ave nw" , "washington" , "dc" , null ! , null ! , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
90+ var addresses = ( await GetGeocoder ( ) . GeocodeAsync ( "1600 pennsylvania ave nw" , "washington" , "dc" , null ! , null ! , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
8291
8392 // Assert
8493 addresses [ 0 ] . AssertWhiteHouse ( ) ;
@@ -94,7 +103,7 @@ public virtual Task Geocode_DifferentCulture_ReturnsExpectedResult(string cultur
94103 Assert . Equal ( cultureName , CultureInfo . CurrentCulture . Name ) ;
95104
96105 // Act
97- var addresses = ( await _geocoder . GeocodeAsync ( "24 sussex drive ottawa, ontario" , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
106+ var addresses = ( await GetGeocoder ( ) . GeocodeAsync ( "24 sussex drive ottawa, ontario" , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
98107
99108 // Assert
100109 addresses [ 0 ] . AssertCanadianPrimeMinister ( ) ;
@@ -111,7 +120,7 @@ public virtual Task ReverseGeocode_DifferentCulture_ReturnsExpectedResult(string
111120 Assert . Equal ( cultureName , CultureInfo . CurrentCulture . Name ) ;
112121
113122 // Act
114- var addresses = ( await _geocoder . ReverseGeocodeAsync ( 38.8976777 , - 77.036517 , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
123+ var addresses = ( await GetGeocoder ( ) . ReverseGeocodeAsync ( 38.8976777 , - 77.036517 , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
115124
116125 // Assert
117126 addresses [ 0 ] . AssertWhiteHouseArea ( ) ;
@@ -122,7 +131,7 @@ public virtual Task ReverseGeocode_DifferentCulture_ReturnsExpectedResult(string
122131 public virtual async Task Geocode_InvalidAddress_ReturnsEmpty ( )
123132 {
124133 // Act
125- var addresses = ( await _geocoder . GeocodeAsync ( "sdlkf;jasl;kjfldksj,fasldf" , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
134+ var addresses = ( await GetGeocoder ( ) . GeocodeAsync ( "sdlkf;jasl;kjfldksj,fasldf" , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
126135
127136 // Assert
128137 Assert . Empty ( addresses ) ;
@@ -133,7 +142,7 @@ public virtual async Task Geocode_InvalidAddress_ReturnsEmpty()
133142 public virtual async Task Geocode_SpecialCharacters_ReturnsResults ( string address )
134143 {
135144 // Act
136- var addresses = ( await _geocoder . GeocodeAsync ( address , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
145+ var addresses = ( await GetGeocoder ( ) . GeocodeAsync ( address , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
137146
138147 // Assert
139148 Assert . NotEmpty ( addresses ) ;
@@ -144,7 +153,7 @@ public virtual async Task Geocode_SpecialCharacters_ReturnsResults(string addres
144153 public virtual async Task Geocode_StreetIntersection_ReturnsResults ( string address )
145154 {
146155 // Act
147- var addresses = ( await _geocoder . GeocodeAsync ( address , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
156+ var addresses = ( await GetGeocoder ( ) . GeocodeAsync ( address , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
148157
149158 // Assert
150159 Assert . NotEmpty ( addresses ) ;
@@ -154,7 +163,7 @@ public virtual async Task Geocode_StreetIntersection_ReturnsResults(string addre
154163 public virtual async Task ReverseGeocode_WhiteHouseCoordinates_ReturnsExpectedArea ( )
155164 {
156165 // Act
157- var addresses = ( await _geocoder . ReverseGeocodeAsync ( 38.8976777 , - 77.036517 , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
166+ var addresses = ( await GetGeocoder ( ) . ReverseGeocodeAsync ( 38.8976777 , - 77.036517 , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
158167
159168 // Assert
160169 addresses [ 0 ] . AssertWhiteHouseArea ( ) ;
@@ -166,7 +175,7 @@ public virtual async Task ReverseGeocode_WhiteHouseCoordinates_ReturnsExpectedAr
166175 public virtual async Task Geocode_InvalidZipCode_ReturnsResults ( string address )
167176 {
168177 // Act
169- var addresses = ( await _geocoder . GeocodeAsync ( address , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
178+ var addresses = ( await GetGeocoder ( ) . GeocodeAsync ( address , TestContext . Current . CancellationToken ) ) . ToArray ( ) ;
170179
171180 // Assert
172181 Assert . NotEmpty ( addresses ) ;
0 commit comments