我正在开发一个 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进行测试?
为了将
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
});
}