클래스 상속 시, 구현하고 싶지 않은 메소드와 속성이 있다면 noSuchMethod 를 사용해보자.
만약 dio 클래스 의 모킹클래스를 구현한다고 해보자.
Dio에는 총 25개의 메소드와 속성이 있는데, 우리는 이걸 다 구현할 필요는 없다.
class FakeDio implements Dio {
@override
Future<Response<T>> get<T>(String path,
{Map<String, dynamic>? queryParameters,
Options? options,
CancelToken? cancelToken,
ProgressCallback? onReceiveProgress}) {
// TODO: implement get
throw UnimplementedError();
}
}
이렇게 get 메소드만 구현했을 때는,
빨간 줄이 그어지면서 24 개나 되는 오버라이드 안내가 뜬다.
우리가 구현하지 않은 메소드를 그대로 놔두고, 이런 메소드가 실수로 호출 되면 예외나 에러 처리를 해주면 참 좋을 것이다.
import 'package:dio/dio.dart';
class FakeDio implements Dio {
@override
Future<Response<T>> get<T>(String path,
{Map<String, dynamic>? queryParameters,
Options? options,
CancelToken? cancelToken,
ProgressCallback? onReceiveProgress}) {
// TODO: implement get
throw UnimplementedError();
}
@override
void noSuchMethod(Invocation invocation) {
throw UnimplementedError();
}
}
get 이외의 Dio 클래스의 메소드와 속성을 호출하면 전부 noSuchMethod로 간다.
이제 쉽게 모킹 클래스를 만들 수 있다.