- こちらのチュートリアルの解説をします。
- チュートリアルを読むのが早いと思いますが、概要をまとめたのでこちらもご参照ください。
HTTP ClientのMock化
- httpパッケージを利用する
getConcreteNumberTrivia
APIのresponse
- 通常はplain textのResponseを受ける
-
application/json
ヘッダーを送りJSONのResponseを受ける方法は2通りある- http://numbersapi.com/42?jsonのURLにアクセスする
-
Content-Type: application/json
を送る
正常系TDD
- チュートリアル参照
異常系
test.dart
test(
'should throw a ServerException when the response code is 404 or other',
() async {
// arrange
when(mockHttpClient.get(any, headers: anyNamed('headers'))).thenAnswer(
(_) async => http.Response('Something went wrong', 404),
);
// act
final call = dataSource.getConcreteNumberTrivia;
// assert
expect(() => call(tNumber), throwsA(TypeMatcher<ServerException>()));
},
);
implementation.dart
@override
Future<NumberTriviaModel> getConcreteNumberTrivia(int number) async {
final response = await client.get(
'http://numbersapi.com/$number',
headers: {'Content-Type': 'application/json'},
);
if (response.statusCode == 200) {
return NumberTriviaModel.fromJson(json.decode(response.body));
} else {
throw ServerException();
}
}
getRandomNumberTrivia
- チュートリアル参照
学んだこと
- 前回と同じでだが、外部との境界にあるDataSourceでExceptionを投げる
- コントロール下にあるアプリの内側では、
Either<Failure, NumberTrivia>
が戻り値になる
- コントロール下にあるアプリの内側では、