我正在使用Mockitou包来测试我的MessageBloc和我的消息应用程序在Flutter中的逻辑,但我在标题中提到的所有测试中都有一个共同的问题(返回类型'Null'不是'Future',这是闭包上下文所要求的。)
import 'package:chat/chat.dart';
import 'package:flutter_newapp/src/blocs/message/message_bloc.dart';
import 'package:flutter_newapp/src/blocs/message/message_event.dart';
import 'package:flutter_newapp/src/blocs/message/message_state.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
class FakeMessageService extends Mock implements IMessageService {}
void main() {
late MessageBloc sut;
late IMessageService messageService;
User user;
setUp(() {
messageService = FakeMessageService();
user = User(
username: 'test', photoUrl: '', active: true, lastSeen: DateTime.now());
sut = MessageBloc(messageService);
});
tearDown(() => sut.close());
test('it should emit initial state before Subscription',
() => expect(sut.state, MessageInitial()));
test('should emit message sent state when message is sent', () {
final message = Message(
from: '1234',
to: '123',
timestamp: DateTime.now(),
contents: 'Hellllo');
when(messageService.send([message])).thenAnswer((_) async => null); // Here is the Error
sut.add(MessageEvent.onMessageSent([message]));
expectLater(sut.stream, emits(MessageState.sent(message)));
});
}
因此,如果任何人有一个解决方案,我将非常感激
我必须重写IMessageService的方法还是什么?我认为这就是问题所在
2条答案
按热度按时间toiithl61#
我认为
messageService.send([message])
返回Future<Message>
类型,这就是为什么您会得到此错误。您可以修改该方法并将类型设置为
Future<Message?>
,或者在测试本身中提供一个伪Future<Message>
值。因为现在你的方法不能返回null,而你从测试中返回null,这就是你面临这个问题的原因。
希望有帮助。
raogr8fs2#
发生此错误是因为您传递给then fun的闭包未返回正确的类型。闭包应返回Future,但它返回了null。
要解决这个错误,你需要确保你传递给fun的闭包返回一个成功完成的Future,你可以通过返回Future. value(null)而不是null来实现。