如何在 Dart 中模拟最终类变量以进行单元测试?

问题描述 投票:0回答:1

我正在开发一个 Dart 项目,我需要为一个使用最终类变量进行 API 调用的类编写单元测试。课程结构如下:

class MyClass {
  final MyApi _api;

  MyClass(this._api);

  Future<void> myMethod() async {
    final response = await _api.getData();
    // Process the response
  }
}

MyApi 实例在构造函数中初始化为最终类变量,如下所示:

class MyApi {
  final Dio _dio;

  MyApi(this._dio);

  Future<Response> getData() async {
    return await _dio.get('https://example.com/data');
  }
}

我想为 MyClass 编写单元测试,但我面临着挑战,因为 _api 是最终类变量,我无法修改实际代码以在测试期间注入模拟实例。

有没有办法在不修改原始代码的情况下模拟_api进行测试?

dart unit-testing mocking
1个回答
0
投票

为了将

MyApi
类的模拟实例传递给
MyClass
,请通过
MyClass()
构造函数传递模拟实例。

像这样:

class MockMyApi implements MyApi {
  MockMyApi(this.expectedData);

  final String expectedData;

  @override
  Future<String> getData() async {
    return expectedData;
  }
}

void main() {
  test('MyClass test', () async {
    final mockApi = MockMyApi('Mock data');
    final myClass = MyClass(mockApi);

    /// Rest of the test
  });
}


© www.soinside.com 2019 - 2024. All rights reserved.