質問編集履歴
2
内容を整理
test
CHANGED
File without changes
|
test
CHANGED
@@ -12,14 +12,10 @@
|
|
12
12
|
|
13
13
|
|
14
14
|
|
15
|
-
テスト観点としては以下を想定していますが、
|
15
|
+
テスト観点としては以下を想定していますが、そもそもビルドエラ-してしまいます。
|
16
16
|
|
17
17
|
・APIから天気情報が正常に返却された場合に呼び出しもとの情報が正常に更新される確認
|
18
18
|
|
19
|
-
・APIから例外がスロ-された場合に例外処理が正常に行われる確認
|
20
|
-
|
21
|
-
・JSON文字列のエンコード、デコードが正常に行われている確認
|
22
|
-
|
23
19
|
|
24
20
|
|
25
21
|
### 発生している問題・エラーメッセージ
|
@@ -120,8 +116,6 @@
|
|
120
116
|
|
121
117
|
|
122
118
|
|
123
|
-
// java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked. 対策で必要
|
124
|
-
|
125
119
|
@get:Rule
|
126
120
|
|
127
121
|
val instantTaskExecutorRule = InstantTaskExecutorRule()
|
@@ -192,24 +186,16 @@
|
|
192
186
|
|
193
187
|
|
194
188
|
|
195
|
-
// JSON文字列を介して天気情報を取得する関数
|
196
|
-
|
197
189
|
fun getJsonWeatherInfo() {
|
198
190
|
|
199
191
|
initializeData()
|
200
192
|
|
201
|
-
// JSON文字列を生成
|
202
|
-
|
203
193
|
val jsonAreaInfo = AreaInfo("tokyo", "2021-06-22")
|
204
194
|
|
205
|
-
// データクラスをJSON文字列化
|
206
|
-
|
207
195
|
val stringAreaInfo = Json.encodeToString(jsonAreaInfo)
|
208
196
|
|
209
197
|
try {
|
210
198
|
|
211
|
-
// returnされたJSON文字列を格納
|
212
|
-
|
213
199
|
resultJsonWeather = weatherApi.fetchJsonWeather(stringAreaInfo)
|
214
200
|
|
215
201
|
} catch (e: UnknownException) {
|
@@ -220,8 +206,6 @@
|
|
220
206
|
|
221
207
|
|
222
208
|
|
223
|
-
// 取得したJSON文字列からデータクラスを生成
|
224
|
-
|
225
209
|
val resultStringWeather = resultJsonWeather?.let { Json.decodeFromString<GetAreaInfo>(it) }
|
226
210
|
|
227
211
|
currentWeather = resultStringWeather?.weather
|
@@ -232,8 +216,6 @@
|
|
232
216
|
|
233
217
|
|
234
218
|
|
235
|
-
// 表示する画像リソースを格納する
|
236
|
-
|
237
219
|
val weatherString = currentWeather ?: return
|
238
220
|
|
239
221
|
try {
|
@@ -254,8 +236,6 @@
|
|
254
236
|
|
255
237
|
```kotlin
|
256
238
|
|
257
|
-
// fetchJsonWeatherの引数となるJSON文字列を生成するクラス
|
258
|
-
|
259
239
|
@Serializable
|
260
240
|
|
261
241
|
data class AreaInfo(
|
@@ -268,8 +248,6 @@
|
|
268
248
|
|
269
249
|
|
270
250
|
|
271
|
-
// returnされたJASON文字列をパースするクラス
|
272
|
-
|
273
251
|
@Serializable
|
274
252
|
|
275
253
|
data class GetAreaInfo(
|
@@ -290,63 +268,7 @@
|
|
290
268
|
|
291
269
|
```
|
292
270
|
|
293
|
-
|
271
|
+
|
294
|
-
|
295
|
-
fun fetchJsonWeather(json: String): String {
|
296
|
-
|
297
|
-
// moshiは、JSON文字列をKotlin オブジェクトに変換するAndroid JSON パーサー
|
298
|
-
|
299
|
-
// moshiオブジェクトを生成
|
300
|
-
|
301
|
-
val moshi = Moshi.Builder()
|
302
|
-
|
303
|
-
.add(Date::class.java, DateAdapter())
|
304
|
-
|
305
|
-
.build()
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
// 変換対象のクラスを渡しアダプタを生成
|
310
|
-
|
311
|
-
val requestAdapter = moshi.adapter(Request::class.java)
|
312
|
-
|
313
|
-
// JSON文字列からオブジェクトに変換
|
314
|
-
|
315
|
-
val request = requestAdapter.fromJson(json) ?: throw IllegalArgumentException()
|
316
|
-
|
317
|
-
|
318
|
-
|
319
|
-
// 変換対象のクラスを渡しアダプタを生成
|
320
|
-
|
321
|
-
val responseAdapter = moshi.adapter(Response::class.java)
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
val maxTemp = (10..40).random()
|
326
|
-
|
327
|
-
val minTemp = (-40..maxTemp).random()
|
328
|
-
|
329
|
-
// JSONに変換するオブジェクトを生成
|
330
|
-
|
331
|
-
val response = Response(
|
332
|
-
|
333
|
-
weather = fetchThrowsWeather(),
|
334
|
-
|
335
|
-
maxTemp = maxTemp,
|
336
|
-
|
337
|
-
minTemp = minTemp,
|
338
|
-
|
339
|
-
date = request.date
|
340
|
-
|
341
|
-
)
|
342
|
-
|
343
|
-
// オブジェクトをJSON文字列に変換
|
344
|
-
|
345
|
-
return responseAdapter.toJson(response)
|
346
|
-
|
347
|
-
}
|
348
|
-
|
349
|
-
```
|
350
272
|
|
351
273
|
### 試したこと
|
352
274
|
|
1
APIに関するコードを追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -290,7 +290,63 @@
|
|
290
290
|
|
291
291
|
```
|
292
292
|
|
293
|
-
|
293
|
+
```kotlin
|
294
|
+
|
295
|
+
fun fetchJsonWeather(json: String): String {
|
296
|
+
|
297
|
+
// moshiは、JSON文字列をKotlin オブジェクトに変換するAndroid JSON パーサー
|
298
|
+
|
299
|
+
// moshiオブジェクトを生成
|
300
|
+
|
301
|
+
val moshi = Moshi.Builder()
|
302
|
+
|
303
|
+
.add(Date::class.java, DateAdapter())
|
304
|
+
|
305
|
+
.build()
|
306
|
+
|
307
|
+
|
308
|
+
|
309
|
+
// 変換対象のクラスを渡しアダプタを生成
|
310
|
+
|
311
|
+
val requestAdapter = moshi.adapter(Request::class.java)
|
312
|
+
|
313
|
+
// JSON文字列からオブジェクトに変換
|
314
|
+
|
315
|
+
val request = requestAdapter.fromJson(json) ?: throw IllegalArgumentException()
|
316
|
+
|
317
|
+
|
318
|
+
|
319
|
+
// 変換対象のクラスを渡しアダプタを生成
|
320
|
+
|
321
|
+
val responseAdapter = moshi.adapter(Response::class.java)
|
322
|
+
|
323
|
+
|
324
|
+
|
325
|
+
val maxTemp = (10..40).random()
|
326
|
+
|
327
|
+
val minTemp = (-40..maxTemp).random()
|
328
|
+
|
329
|
+
// JSONに変換するオブジェクトを生成
|
330
|
+
|
331
|
+
val response = Response(
|
332
|
+
|
333
|
+
weather = fetchThrowsWeather(),
|
334
|
+
|
335
|
+
maxTemp = maxTemp,
|
336
|
+
|
337
|
+
minTemp = minTemp,
|
338
|
+
|
339
|
+
date = request.date
|
340
|
+
|
341
|
+
)
|
342
|
+
|
343
|
+
// オブジェクトをJSON文字列に変換
|
344
|
+
|
345
|
+
return responseAdapter.toJson(response)
|
346
|
+
|
347
|
+
}
|
348
|
+
|
349
|
+
```
|
294
350
|
|
295
351
|
### 試したこと
|
296
352
|
|