存根函数始终返回 null

Chr*_*ong 5 flutter flutter-test

目前我正在学习 Resocoder 教程(DDD 课程)。在本课程中,有一个名为i_auth_facade.dart 的抽象类,其中包含一个函数 getSignedInUser。

我已经模拟了该类并尝试从 getSignedInUser 方法中获取用户的有效选项,但结果始终为 null。

另外,当我尝试执行AuthBloc 的authCheckRequested方法(然后在后台调用 getSignedInUser 方法)时,我返回 null。

我肯定在 Mockito 上遇到了一些错误,因为存根似乎不起作用。

有人能指出我为什么不返回 optionOf(User) 而是 null 的正确方向吗?

import 'package:bloc_test/bloc_test.dart';
import 'package:dartz/dartz.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
import 'package:teach_mob_student/application/auth/auth_bloc.dart';
import 'package:teach_mob_student/domain/auth/i_auth_facade.dart';
import 'package:teach_mob_student/domain/auth/user.dart';
import 'package:teach_mob_student/domain/auth/value_objects.dart';
import 'package:teach_mob_student/domain/core/value_objects.dart';

class MockIAuthFacade extends Mock implements IAuthFacade {}

void main() {
  final tValidUser = User(
    id: UniqueId(),
    name: StringSingleLine('Test User'),
    emailAddress: EmailAddress('test@user.com'));


  test('Should return valid option of user', () async {
    // This is to check, if optionOf actually returns a user --> Yes it does
    Option<User> tDirectResult = optionOf<User>(tValidUser);

    // Here I stub the getSignedInUser method. If it is executed, I want to receive a valid user.
    when(MockIAuthFacade()
      .getSignedInUser()
    ).thenAnswer((_) async => Future.value(optionOf<User>(tValidUser)));

    // Here I execute the method, and I would expect to get Future<Option<User>> back, but I only get back null.
    final facade = MockIAuthFacade();

    Option<User> tStubbedResult = await facade.getSignedInUser();

    print(tDirectResult);
    print(tStubbedResult);
  });

  // Here I do the same, but I execute the authCheckRequested method of the AuthBloc, which executes the
  // getSignedInUser method. Also here I get back null as result.
  blocTest('Should return valid option of user.', 
    build: () async {
      when(MockIAuthFacade()
        .getSignedInUser()
      ).thenAnswer((_) async => Future.value(optionOf<User>(tValidUser)));

      return AuthBloc(MockIAuthFacade());
    },
    act: (bloc) async {
      bloc.add(AuthEvent.authCheckRequested());
    },
    expect: [
    ]
  );
}
Run Code Online (Sandbox Code Playgroud)