下面的代码曾经在null安全之前工作,但现在我得到“类型'Null'不是类型'Future<String?”““我完全不知道为什么,也不知道该怎么做。请帮助,这应该很容易(除了我),因为你只需要复制代码并将其作为测试运行以获取异常:
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
class MockMethodChannel extends Mock implements MethodChannel {}
void main() {
group('all', () {
test('test', () async {
final mockMethodChannel = MockMethodChannel();
when(mockMethodChannel
.invokeMethod<String>("GET com.eight/preference-management/preferences"))
.thenAnswer((_) async => "test");
});
});
}
字符串
4条答案
按热度按时间qojgxg4l1#
您的
MethodChannel.invokeMethod
函数签名表明它返回Future<String?>
,但由于MockMethodChannel
没有任何invokeMethod()
的实现,因此它将返回null
; dart 的零安全会因为你撒谎而生气为了快速修复,invokeMethod
可以具有Future<String?>?
的返回类型。当你这样做的时候,你是在说即使返回值是null,null安全也不应该打扰你。但这不是一个永久的解决方案,我只是想让你明白这个问题。
你可以在dev_dependencies中添加build_runner:在pubspec.yaml中
dart pub add build_runner --dev
个并修改代码以
字符串
并运行
flutter pub run build_runner build --delete-conflicting-outputs
for build runner来为您构建存根文件3pmvbmvn2#
如果你使用的是带null安全的Flutter,那么创建mock类的方式就不一样了,你现在需要使用
@GenerateMocks
annotation。请阅读documentation on null safety。
vfwfrxfs3#
如果你想要一个简单的方法就这样做
字符串
如果你想检查这个=> https://github.com/dart-lang/mockito/blob/master/test/manual_mocks_test.dart
xpszyzbs4#
我也遇到过类似的问题,只是因为我将测试类从一个目录移动到了另一个目录。
所以我删除了我的
.mocks.dart
文件,使用dart run build_runner build --delete-conflicting-outputs
重新生成它,我的测试又开始工作了。