flutter 返回类型“Null”不是< Message>闭包上下文所要求的“Future

jdgnovmf  于 2023-02-16  发布在  Flutter
关注(0)|答案(2)|浏览(200)

我正在使用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的方法还是什么?我认为这就是问题所在

toiithl6

toiithl61#

我认为messageService.send([message])返回Future<Message>类型,这就是为什么您会得到此错误。
您可以修改该方法并将类型设置为Future<Message?>,或者在测试本身中提供一个伪Future<Message>值。
因为现在你的方法不能返回null,而你从测试中返回null,这就是你面临这个问题的原因。
希望有帮助。

raogr8fs

raogr8fs2#

发生此错误是因为您传递给then fun的闭包未返回正确的类型。闭包应返回Future,但它返回了null。
要解决这个错误,你需要确保你传递给fun的闭包返回一个成功完成的Future,你可以通过返回Future. value(null)而不是null来实现。

when(messageService.send([message])).thenAnswer((_) async => Future.value(null));

相关问题