0

I am trying to create wrapper (SDK) below, and the code okay, but when I want to unit test using Mockito I have problem, because in order to use I need to pass in MockDio as an argument, and this can be the problem because I don't want user to specifying dependencies and import Dio package in order to use my package.

class SampleService {
  final String url;
  final String apiKey;
  final Dio dio;

  SampleService({required this.url, required this.apiKey})
      : dio = Dio(BaseOptions(
            baseUrl: url,
            contentType: 'application/json',
            headers: {'API-Key': apiKey}));

  Future<Bitcoin> getTransactionById(String id) async {
    try {
      return await SampleClient(dio).getTransaction(id);
    } catch (obj) {
      throw Exception().throwException(obj);
    }
  }
}

How can I solve the problem

Robert Sandberg
  • 6,832
  • 2
  • 12
  • 30
Alvin
  • 8,219
  • 25
  • 96
  • 177

1 Answers1

1

Not sure I understand you, but how about something like this? Then you can mock it for testing, and still not require the users to inject an instance of Dio:

class SampleService {
  final String url;
  final String apiKey;
  late final Dio? dio;

  SampleService({required this.url, required this.apiKey, this.dio}) {
    dio ??= Dio(BaseOptions(
            baseUrl: url,
            contentType: 'application/json',
            headers: {'API-Key': apiKey}));
  }

  ...
}
Robert Sandberg
  • 6,832
  • 2
  • 12
  • 30