Pab*_*ito 6 mockito dart flutter-test dart-null-safety
在空安全之前,我可以简单地模拟sendRequest(...)方法,如下所示:
void stubBaseRepositorySendRequestResponse(String response) {
when(baseRepository.sendRequest(onGetData: anyNamed('onGetData')))
.thenAnswer((_) {
return Future<String>.value(response);
});
}
Run Code Online (Sandbox Code Playgroud)
这个方法的签名是:
Future<T> sendRequest<T>({required Future<T> Function() onGetData})
Run Code Online (Sandbox Code Playgroud)
如何使用新的空安全版本的 mockito 做到这一点?我还能保持这个存根的通用特性并允许传入任何参数吗?
这可以通过mocktail轻松完成。更容易,没有 mockito 所需的代码生成。
首先导入mocktail很重要:
import 'package:mocktail/mocktail.dart';
Run Code Online (Sandbox Code Playgroud)
然后创建一个我们想要模拟的类的模拟:
class MockBaseRepository extends Mock implements BaseRepository {}
void stubBaseRepositorySendRequestResponse(String response) {
when(() => baseRepository.sendRequest(
onGetData: any(named: 'onGetData', that: isNotNull))).thenAnswer((_) {
return Future<String>.value(response);
});
}
Run Code Online (Sandbox Code Playgroud)
在mockito空安全升级后更新存根:
为了概述该过程,需要生成一个存根类,这是使用build_runner
package.json 完成的。您将需要导入该类和存根所需的方法。
class MyClass extends Mock implements MyClassBase {}
Run Code Online (Sandbox Code Playgroud)
代替
class MockMyClass extends Mock implements MyClassBase {}
Run Code Online (Sandbox Code Playgroud)
@GenerateMocks([MockedClass])
例如@GenerateMocks([MyClass])
(它需要导入import 'package:mockito/annotations.dart';
:)flutter pub run build_runner build --delete-conflicting-outputs
import '{TEST_FILE_NAME}.mocks.dart';
. Generate(
现在存根类可以使用与开头相同的名称Mock
,例如MockMyClass
when(mockMyClass.someFancyMethod(any, any))
.thenAnswer((_) => Future.value(null));
Run Code Online (Sandbox Code Playgroud)
以这种方式模拟 NavigatorObserver 时遇到问题,我得到的错误:
The following MissingStubError was thrown building IconTheme(color: Color(0xdd000000)): 'navigator'
Run Code Online (Sandbox Code Playgroud)
存根navigator
并NavigatorState
没有帮助,我猜这与上下文传播有关。
我通过使用以下非空安全方式解决了这个问题,如mockito的空安全指南中所指定:
@GenerateMocks([],
customMocks: [
MockSpec<NavigatorObserver>(returnNullOnMissingStub: true)
])
Run Code Online (Sandbox Code Playgroud)
在那次跑步之后
flutter pub run build_runner build --delete-conflicting-outputs
Run Code Online (Sandbox Code Playgroud)
它将MockNavigatorObserver
通过导入*.mocks.dart
文件(如上所述)产生可用。当然,由于它是由mockito生成的,因此需要删除该类的任何自定义定义。
归档时间: |
|
查看次数: |
1254 次 |
最近记录: |